Microsoft Azure VM中PHP mail()发邮件报Network is unreachable错误
你遇到的25端口连接超时问题,核心原因是Azure平台默认对所有公网出站的TCP 25端口做了全局限制,该限制独立于网络安全组(NSG)规则,仅开放NSG的25端口无法生效。
排查和修复步骤
- 第一步:验证平台层面端口连通性
在虚拟机内执行连通性测试命令:
如果返回连接超时,可确认是平台层面的25端口限制导致。nc -zv alt1.gmail-smtp-in.l.google.com 25 - 第二步:根据订阅类型处理平台限制
- 若使用企业协议、教育类订阅:可提交Azure工单申请解除对应虚拟机的25端口出站限制,提交时说明合法的邮件发送场景,审核通过后限制会被解除。
- 若使用免费试用、按量付费(Pay-As-You-Go)类订阅:Azure不支持解除25端口出站限制,需切换为邮件中继方案:
- 使用第三方邮件服务商的加密SMTP端口(通常为587端口,带TLS认证),比如SendGrid、企业邮件服务等,这些服务商支持通过非25端口转发邮件。
- 修改Postfix配置为中继模式,将所有外发邮件转发到第三方邮件服务商的587端口发送,无需直连收件方的25端口。
- 第三步:修复IPv6连接报错
错误日志中的IPv6网络不可达报错,是因为你的虚拟机未配置公网IPv6地址,可修改Postfix配置禁用IPv6:
编辑/etc/postfix/main.cf文件,将inet_protocols参数修改为:
修改完成后执行inet_protocols = ipv4systemctl restart postfix重启服务即可。 - 第四步:检查虚拟机内部防火墙规则
执行iptables -L -n(Linux系统)确认内部防火墙没有禁止出站587/25端口的规则,如有对应拒绝规则需删除或修改为允许。
内容的提问来源于stack exchange,提问作者Hossam Hamdi
相关产品推荐
相关产品推荐

