Docker环境下无需安装SMTP插件实现WordPress对接Mailhog
无插件WordPress对接Mailhog Docker部署方案
你之前的配置报错核心原因是仅配置了PHP调用msmtp,未提供msmtp的目标服务配置,另外PHP的SMTP、smtp_port配置仅对Windows环境生效,Linux环境下不生效,不需要添加。以下两种都是纯Docker自动化配置、无需安装WordPress插件的可行方案:
方案1:补全msmtp配置(系统层配置,无需修改WordPress代码)
该方案完全在镜像构建和PHP配置层面完成,无需修改任何WordPress业务代码:
- 首先在Docker构建目录下新建
msmtprc配置文件,内容如下:
account default host mailhog port 1025 from webadmin@localhost auth off tls off
- 修改WordPress服务的Dockerfile,增加msmtp安装和配置复制逻辑:
FROM wordpress:php8.2-fpm # 安装msmtp客户端 RUN apt-get update && apt-get install -y --no-install-recommends msmtp \ && rm -rf /var/lib/apt/lists/* # 复制msmtp全局配置 COPY ./msmtprc /etc/msmtprc RUN chmod 644 /etc/msmtprc # 复制PHP邮件配置 COPY ./mail.ini /usr/local/etc/php/conf.d/mail.ini
mail.ini仅保留以下配置即可,无需添加其他SMTP相关配置:
sendmail_path = "/usr/bin/msmtp -t" mail.log = "/var/www/phpmail.log"
- 确保
docker-compose.yml中Mailhog服务的名称为mailhog,与msmtp配置中的host一致,两个服务在同一个Docker网络下即可正常通信。
方案2:注入PHPMailer钩子(无需额外安装系统依赖,镜像体积更小)
该方案直接利用WordPress原生钩子修改PHPMailer配置,不需要安装msmtp,也可以通过Docker脚本自动化注入:
- 编写自动注入脚本,在WordPress容器启动时自动将配置追加到
wp-config.php末尾,示例启动脚本逻辑:
#!/bin/bash set -e # 等待WordPress初始化完成后注入Mailhog配置 if [ ! -f /var/www/html/wp-config.php ]; then # 等待WordPress官方镜像自动生成wp-config.php sleep 10 fi # 避免重复注入 if ! grep -q "Mailhog SMTP配置" /var/www/html/wp-config.php; then cat << 'EOF' >> /var/www/html/wp-config.php // Mailhog SMTP配置 add_action('phpmailer_init', function ($phpmailer) { $phpmailer->isSMTP(); $phpmailer->SMTPAuth = false; $phpmailer->SMTPSecure = ''; $phpmailer->SMTPAutoTLS = false; $phpmailer->Host = 'mailhog'; $phpmailer->Port = 1025; $phpmailer->From = 'webadmin@localhost'; $phpmailer->FromName = 'Local Dev'; }); EOF fi # 执行原有启动命令 exec docker-entrypoint.sh php-fpm
- 将该脚本设置为WordPress容器的启动入口即可,全程不需要手动修改代码或者安装插件。
两种方案均适用于本地开发场景,全部配置可以通过Docker脚本自动化完成,不需要人工介入操作。
内容的提问来源于stack exchange,提问作者dot
相关产品推荐
相关产品推荐

