2017-02-10 2 views
1

Я хочу установить sendmail_path в контейнере WordPress и использовать sendmail, предоставленный другим контейнером. В моем случае его MailHog.Docker connect Mail catcher с WordPress

Так что это мой докер-Compose:

version: '2' 
services: 
    wordpress: 
     image: wordpress 
     links: 
      - db:mysql 
      - mailhog 
     ports: 
      - 80:80 
     domainname: foo.com 
     hostname: foo 
     volumes: 
      - ./public:/var/www/html 
     environment: 
      WORDPRESS_DB_PASSWORD: example 
     depends_on: 
      - mailhog 

    mailhog: 
     image: mailhog/mailhog 
     ports: 
      - 1025:1025 
      - 8025:8025 

    db: 
     image: mariadb 
     environment: 
      MYSQL_ROOT_PASSWORD: example 

Я попытался выполнения command: "echo 'sendmail_path = \"/usr/local/bin/mailhog sendmail\"' > /usr/local/etc/php/conf.d/mail.ini" на WordPress контейнере, но это на самом деле выводит его ...

есть ли эти два разделить объемы?

PS. Я знаю, что могу использовать его в качестве SMTP-сервера в APP, но я хочу иметь дело с ним более автоматизированным способом.

ответ

2

У вас нет почтового ящика, установленного в контейнере wordpress, путь /usr/local/bin/mailhog не выходит.

Что вы хотите сделать, это отправить почту через sendmail, и эта почта должна быть отправлена ​​почтовым ходом. Для этого необходимо расширить WordPress dockerfile:

FROM wordpress 
RUN curl --location --output /usr/local/bin/mhsendmail https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64 && \ 
    chmod +x /usr/local/bin/mhsendmail 

RUN echo 'sendmail_path="/usr/local/bin/mhsendmail --smtp-addr=mailhog:1025 [email protected]"' > /usr/local/etc/php/conf.d/mailhog.ini 

Обратите внимание на параметр --smtp-adrr: он должен быть в форме <mailhog_hostname>:<mailhog_port>.

Измените свой docker-compose.yml, чтобы создать свой файл докеров.

version: '2' 
services: 
    wordpress: 
     build: 
      context: ./ 
      dockerfile: ./Dockerfile 
     links: 
      - db:mysql 
      - mailhog 
     ports: 
      - 80:80 
     domainname: foo.com 
     hostname: foo 
     volumes: 
      - ./public:/var/www/html 
     environment: 
      WORDPRESS_DB_PASSWORD: example 
     depends_on: 
      - mailhog 

    mailhog: 
     image: mailhog/mailhog 
     ports: 
      - 1025:1025 
      - 8025:8025 

    db: 
     image: mariadb 
     environment: 
      MYSQL_ROOT_PASSWORD: example 

В этом Exemple, то dockerfile вы написали должны быть названы «Dockerfile» и должен находиться в текущем каталоге (где вы запустили Докер-Compose). Вы можете соответствующим образом изменить путь. Вы можете удалить запись портов 1025: 1025, если вам не нужно подключаться к ней с хоста.

Теперь функция mail() должна работать по назначению.

+0

Это выглядит очень многообещающим @Dinacel, но я получаю сообщение об ошибке «Не удалось создать почтовую функцию». У меня правильно установлен sendmail_path, и он отображается в phpinfo. Когда я ssh в контейнер WP и пытаюсь запустить mhsendmail, он ничего не показывает. – Kubitomakita

+0

Привет, я исправил файл Docker, потому что были некоторые ошибки: 'usr/local/etc/php/conf.d/mailhog.ini' не имел своей стартовой косой черты (чтобы обеспечить абсолютное определение пути, это было typo) и '--smtp-addr = mailserver: 1025' (он должен быть почтовым ящиком в вашем примере, а не почтовым сервером, поскольку я написал) не имел правильного имени хоста – Dinacel

+0

К сожалению, он по-прежнему не работает с хостом mailhog. Я попробовал также localhost, но не повезло. Ошибок в системных журналах нет, просто PHPMailer говорит: «Не удалось создать почтовую функцию» – Kubitomakita