【问题标题】:Docker connect Mail catcher with WordPressDocker 将邮件捕手与 WordPress 连接起来
【发布时间】:2017-02-10 07:16:48
【问题描述】:

我想在 WordPress 的容器中设置一个 sendmail_path 并使用另一个容器提供的 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

我尝试在 WordPress 容器上执行 command: "echo 'sendmail_path = \"/usr/local/bin/mailhog sendmail\"' > /usr/local/etc/php/conf.d/mail.ini",但它实际上打印了它...

这两个必须共享卷吗?

PS。我知道我可以将它用作 APP 中的 SMTP 服务器,但我想以更自动化的方式处理它。

【问题讨论】:

    标签: wordpress docker docker-compose mailcatcher


    【解决方案1】:

    您没有在 WordPress 容器中安装 MailHog,因此路径 /usr/local/bin/mailhog 不存在。

    您要做的是通过 sendmail 发送电子邮件,而这些电子邮件必须被 MailHog 捕获。为此,您必须扩展 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 --from=no-reply@docker.dev"' > /usr/local/etc/php/conf.d/mailhog.ini
    

    注意--smtp-addr 参数的格式必须为<mailhog_hostname>:<mailhog_port>

    更改您的 docker-compose.yml 以构建您的 Dockerfile。

    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
    

    在本例中,您编写的 Dockerfile 必须命名为“Dockerfile”,并且必须位于当前目录(运行 docker-compose 的位置)中。您可以相应地更改路径。如果您不需要从主机连接到 1025:1025 端口条目,则可以删除它。

    现在mail() 函数应该可以正常工作了。

    【讨论】:

    • 这看起来很有希望@Dinacel,但我收到“无法实例化邮件功能”错误。我正确设置了 sendmail_path,它在 phpinfo 中可见。当我 ssh 进入 WP 容器并尝试运行 mhsendmail 时,它没有显示任何内容。
    • 嗨,我已经修复了 Dockerfile,因为有一些错误:usr/local/etc/php/conf.d/mailhog.ini 没有它的起始斜杠(为了确保绝对路径定义,这是一个错字)和--smtp-addr=mailserver:1025(在您的示例中它必须是 mailhog,而不是我写的 mailserver)没有正确的主机名
    • 不幸的是,它仍然不适用于 mailhog 主机。我也试过 localhost 但没有运气。系统日志中没有错误,只是 PHPMailer 说“无法实例化邮件功能”
    • 它在这里工作,无需任何其他修改。 wordpress dockerfile 是否成功构建?您是否更改了 wordpress 基本配置?是否安装了第三方插件?您可以发送您的 phpinfo 和 wordpress 错误日志吗?这真的很奇怪。我会再检查一下。
    • 哪个程序会读取/usr/local/etc/php/conf.d/mailhog.ini?我有一个similar question
    猜你喜欢
    • 1970-01-01
    • 2021-07-25
    • 2021-04-28
    • 2014-12-05
    • 1970-01-01
    • 2018-10-11
    • 2023-01-14
    • 2020-11-09
    • 2019-04-08
    相关资源
    最近更新 更多