Docker部署WordPress+WP Mail SMTP插件(默认PHP选项)无法发送邮件,测试邮件报504超时错误
Docker部署WordPress+WP Mail SMTP插件(默认PHP选项)无法发送邮件,测试邮件报504超时错误
嘿,针对你遇到的Docker环境下WordPress邮件发送超时问题,结合你提供的配置文件,我整理了几个关键排查方向和解决方案:
一、先确认ssmtp核心配置是否正确
你Dockerfile里配置了mailhub=smtp-server,但这个是占位符,必须替换成实际可用的SMTP服务器地址+端口,比如:
- 如果用Gmail:
smtp.gmail.com:587 - 如果用SendGrid:
smtp.sendgrid.net:587 - 如果是自建SMTP:
你的服务器IP:25(注意25端口可能被ISP封禁)
同时,若你的SMTP服务器需要认证,还得在/etc/ssmtp/ssmtp.conf里添加以下配置:
AuthUser=你的SMTP用户名 AuthPass=你的SMTP密码(如果是第三方服务可能需要应用专用密码) UseTLS=YES # 加密连接,对应587端口;如果用465端口则用UseSSL=YES
你可以修改Dockerfile里的sed命令,把这些配置加上:
RUN sed -ri -e 's/^(mailhub=).*/\1smtp.gmail.com:587/' \ -e 's/^#(FromLineOverride)/\1/' \ -e 's/^#(AuthUser)/\1=your-email@gmail.com/' \ -e 's/^#(AuthPass)/\1=your-app-password/' \ -e 's/^#(UseTLS)/\1=YES/' /etc/ssmtp/ssmtp.conf
二、确保PHP使用ssmtp作为发送工具
WordPress的PHP-FPM容器默认可能没指定用ssmtp代替系统sendmail,你需要在Dockerfile里添加PHP配置,指定sendmail路径:
# 添加PHP sendmail配置,指向ssmtp RUN echo 'sendmail_path = "/usr/sbin/ssmtp -t"' >> /usr/local/etc/php/conf.d/sendmail.ini
三、验证容器到SMTP服务器的网络连通性
504超时很大概率是容器无法访问SMTP服务器,你可以进入WordPress容器测试:
- 进入容器:
docker exec -it 你的wordpress容器名 /bin/bash - 测试端口连通性:
telnet smtp.gmail.com 587(如果返回Connected则网络正常,否则检查防火墙、Docker网络配置) - 用ssmtp直接发测试邮件:
echo -e "To: test@example.com\nFrom: your-email@gmail.com\nSubject: Test Email\n\nThis is a test from ssmtp" | ssmtp test@example.com
如果这步失败,说明是系统级的邮件配置或网络问题,和WP Mail SMTP插件无关。
四、检查WP Mail SMTP插件的设置与日志
- 插件里选择“默认PHP”选项后,确保发件人邮箱和你ssmtp配置里的
From地址一致; - 开启插件的调试日志:进入WP后台 → WP Mail SMTP → 设置 → 邮件 → 调试,勾选“保存调试日志”,然后再发测试邮件,查看日志里的具体错误信息(比如认证失败、连接超时等);
- 避免用localhost作为SMTP服务器,因为容器里的localhost是容器自身,不是宿主机。
五、其他可能的问题
- 检查宿主机的防火墙/安全组是否允许容器访问SMTP服务器的端口(比如587、465);
- 若用第三方SMTP服务,确认你的账号没有被限制发送邮件(比如Gmail需要开启低安全性应用或用应用专用密码);
- 确保容器的时间和SMTP服务器时间同步,避免因时间差导致的认证失败。
备注:内容来源于stack exchange,提问作者jotyhista
相关产品推荐
相关产品推荐

