Azure托管WordPress经25端口SMTP发信连接失败问题排查求助
故障核心特征:SMTP服务器侧已放行WordPress应用服务IP的25端口访问权限,但无来自站点IP的入站流量,测试发信返回10060连接超时错误。
一、优先排查Azure平台侧默认出站限制(占同类故障90%以上)
- Azure应用服务底层默认拦截所有实例发起的目标端口为25的出站TCP连接,该规则优先级高于用户自行配置的网络安全组出站规则,和实例操作系统层面的防火墙配置无关。
- 校验方式:打开应用服务的Kudu高级管理工具,进入PowerShell调试控制台,执行命令
Test-NetConnection 你的SMTP服务器地址 -Port 25,如果返回TcpTestSucceeded : False,且SMTP服务器侧始终无对应入站流量,可直接判定为平台侧拦截。 - 限制说明:免费层、共享层、基础层、标准层应用服务的25端口出站拦截默认永久生效,无法解除;仅Premium v2/v3、Isolated隔离层级的生产环境实例,可申请解除25端口出站限制,申请生效后平台不再拦截对应实例的25端口出站流量。
二、WordPress与插件配置校验
- 核对SMTP Mailer 1.1.4插件配置:25端口默认对应明文/STARTTLS传输模式,不要强制绑定SSL/TLS加密上下文。当前报错配置中强制加载了SSL连接参数,部分SMTP服务会直接丢弃不匹配的握手请求,导致连接无响应。
- 临时禁用所有带出站请求拦截功能的安全插件(如WP安全类、防火墙类插件),这类插件可能在PHP层面拦截SMTP出站请求,禁用后重跑测试邮件验证。
- 检查站点根目录下
wp-config.php文件,确认没有配置错误的全局代理参数(如WP_PROXY_HOST、WP_PROXY_PORT),错误的代理配置会将所有SMTP请求转发至无效地址,无法到达目标SMTP服务器。
三、网络链路补全校验
- 确认SMTP服务器防火墙放行了应用服务的全部出站IP:应用服务为多实例部署,出站地址为一个IP池而非单个地址,可在应用服务「属性」页面获取完整出站IP列表,全部加入白名单即可。注意不要将应用服务的入站IP作为出站IP加白,二者不属于同一地址池,配置错误会直接导致连接超时。
- 确认应用服务实例没有配置虚拟网络集成的自定义路由,如果自定义路由表将25端口流量转发至不存在的下一跳地址,也会出现流量无法到达SMTP服务器的问题。
四、无平台权限调整时的快速替代方案
- 直接将SMTP发信端口调整为587(对应STARTTLS加密)或465(对应SSL/TLS加密),Azure平台不会拦截这两个端口的出站流量,绝大多数自建、第三方SMTP服务均支持这两个端口,调整后对应修改插件的加密选项即可,无需申请平台规则变更。
- 若自建SMTP服务仅支持25端口且无法升级应用服务层级,可在SMTP服务前端增加发信代理,监听587/465端口接收来自应用服务的发信请求,再转发至后端25端口的SMTP服务。
原始报错记录
Connection: opening to ip address:25, timeout=300, options=array ( 'ssl' => array ( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true, ),)
Connection failed. Error #2: stream_socket_client(): unable to connect to ip address:25 (A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.) [C:\home\site\wwwroot\wp-includes\PHPMailer\SMTP.php line 389]
SMTP ERROR: Failed to connect to server: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. (10060)
SMTP Error: Could not connect to SMTP host.
内容的提问来源于stack exchange,提问作者Sean

