WordPress邮件投递失败,排查端口25封禁
WordPress 邮件投递失败,最常见的原因是服务器封禁了 25 端口。
很多云厂商默认限制 25 端口出站,导致 PHP 的 mail() 函数无法连接外部邮件服务器。
本文从零开始,教你定位端口状态,并通过改用 465 或 587 端口恢复邮件发送。
确认邮件失败的具体表现
先别急着改配置,打开 WordPress 后台,进入 设置 → 常规,确认管理员邮箱填写正确。
然后尝试用“忘记密码”功能触发一封测试邮件。
如果页面提示“邮件发送失败”或长时间无响应,说明投递链路已经中断。
下一步登录服务器,查看邮件日志。
常见的日志路径是 /var/log/maillog 或 /var/log/mail.log。
执行:
tail -n 50 /var/log/maillog
如果看到 Connection timed out、Network is unreachable 或 Connection refused,基本可以确定是端口或网络策略问题。
用 telnet 测试 25 端口连通性
telnet 是排查端口最直接的工具。
在服务器上执行:
telnet smtp.qq.com 25
如果卡住不动或提示 Connection timed out,说明 25 端口被防火墙或云安全组拦截。
如果立刻返回 220 开头的欢迎信息,说明端口通,问题可能出在 DNS 或邮件内容上。
再测试 465 和 587 端口:
telnet smtp.qq.com 465
telnet smtp.qq.com 587
通常情况下,465 和 587 端口不会被封禁。
如果这两个端口能连通,就可以把 WordPress 的邮件发送方式切换到 SMTP。
安装 SMTP 插件并配置加密端口
WordPress 默认用 PHP 的 mail() 函数发信,它依赖本地邮件服务,而本地服务又走 25 端口。
绕过这个限制最稳妥的方法是安装 SMTP 插件。
推荐使用 WP Mail SMTP 或 Fluent SMTP。
以 WP Mail SMTP 为例:
- 在后台 插件 → 安装插件 中搜索 WP Mail SMTP,安装并启用。
- 进入 WP Mail SMTP → 设置,填写发件邮箱、发件人名称。
- 在 Mailer 中选择“其他 SMTP”。
- 填写 SMTP 主机(如
smtp.qq.com)、端口465、加密方式SSL。 - 输入邮箱账号和授权码(不是登录密码,需在邮箱后台生成)。
- 保存后点击“发送测试邮件”。
如果测试成功,WordPress 的订单通知、密码重置等邮件都会通过 SMTP 发出。
调整云服务器安全组与防火墙
有时候服务器内部防火墙没放行出站端口,也会导致连接失败。
检查 iptables 规则:
iptables -L -n
如果看到 OUTPUT 链有 DROP 规则,需要放行 465 和 587:
iptables -A OUTPUT -p tcp --dport 465 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 587 -j ACCEPT
同时登录云厂商控制台,检查安全组出站规则是否允许 TCP 465/587。
部分厂商会单独限制 25 端口,但 465/587 默认放行。
避坑与效果验证
配置完成后,不要只依赖插件自带的测试。
再触发一次 WordPress 的“忘记密码”邮件,到收件箱确认是否收到。
如果仍然失败,检查以下几点:
- 授权码是否过期或填错。
- 发件邮箱是否被收件方标记为垃圾邮件。
- 插件是否与其他邮件插件冲突。
- 服务器时间是否准确,误差过大会导致 SSL 握手失败。
如果 465 端口也不通,可以尝试 587 端口配合 TLS 加密。
部分企业邮箱只开放 587。
常见疑问
问:为什么云服务器要封 25 端口?
答:主要是为了防止垃圾邮件。
云厂商默认限制 25 端口出站,避免服务器被入侵后群发垃圾邮件。
问:不用插件能解决吗?
答:可以修改 PHP 的 sendmail_path 指向第三方 SMTP 服务,但配置复杂且不易维护,插件方式更简单可靠。
问:换了端口还是失败怎么办?
答:检查 SMTP 主机地址是否正确、授权码是否有效,并尝试用 telnet 手动连接 SMTP 服务器确认端口是否真的开放。
排查 WordPress 邮件投递失败,核心就是确认 25 端口是否被封。
一旦确认,改用 SMTP 插件的 465 或 587 端口,通常就能恢复邮件发送。