PHPMailer对接Office365 SMTP运行正常 一周前突然发送失败求解决方案
PHPMailer连接Office365 SMTP发送失败故障解决方案
故障根因:你的报错日志显示,程序可正常连接Office365 SMTP服务器、完成EHLO握手、发送STARTTLS指令后也收到了服务器的就绪响应,但后续TLS加密协商直接失败导致连接断开。因你原有配置未做修改突然失效,完全符合2021年10月Office365正式停止支持TLS1.0、TLS1.1协议的服务变更特征。
可按以下步骤依次排查解决:
- 移除原有不安全的SSL验证配置,原有配置关闭了证书校验、允许自签名证书,Office365使用公共可信CA签发的正规证书,无需该配置,反而可能导致TLS协商异常。
- 强制指定TLS1.2作为加密协议版本,更新你的
SMTPOptions配置为以下内容:
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => true, 'verify_peer_name' => true, 'allow_self_signed' => false, 'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT ) );
- 验证服务端环境依赖:
- 确认PHP版本 >= 5.6,建议升级到7.1及以上稳定版本,低于5.6的PHP版本原生不支持TLS1.2协议指定
- 确认服务器openssl扩展版本 >= 1.0.1,可通过
phpinfo()函数查看当前openssl版本信息 - 确认服务器出站587端口无防火墙、安全组规则拦截,且没有网络代理/网关设备对TLS包做协议降级改写
- 确认Office365账号权限配置:
- 若对应邮箱账号开启了多因素认证,不能直接使用账号登录密码作为SMTP密码,需要在账号安全中心生成应用专用密码填入配置
- 若租户开启了安全默认值策略,需要在Azure AD后台为对应邮箱账号单独启用「经过身份验证的SMTP」权限,否则基础SMTP认证请求会被直接拒绝
内容的提问来源于stack exchange,提问作者DrCreampuff
相关产品推荐
相关产品推荐

