Docker подключить Mail Catcher с WordPress

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

Итак, это мой docker-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-сервера в приложении, но я хочу иметь дело с этим более автоматизированным способом.

1 ответ

Решение

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

То, что вы хотите сделать, это отправка почты через sendmail, и эта почта должна быть перехвачена mailhog. Для этого вы должны расширить dockerfile wordpress:

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 --from=no-reply@docker.dev"' > /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

В этом примере записанный вами файл Docker должен иметь имя "Dockerfile" и находиться в текущем каталоге (где вы запускаете docker-compose). Вы можете изменить путь соответственно. Вы можете удалить запись портов 1025:1025, если вам не нужно подключаться к ней с хоста.

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

Другие вопросы по тегам