由于 TLS 1.1/1.0,定期出现 Office 365 SMTP 发送错误

Periodic Office 365 SMTP Send Error Due to TLS 1.1/1.0

我们有 PHP Web 应用程序可以通过经过身份验证的 smtp 发送 SMTP 电子邮件。office365.com。这已经工作了至少几年。

我们正在使用 PHP Mailer 5.2。我们将 crypto_method 强制为 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT。

奇怪的是。大约 75% 的时间它工作正常。其余时间它报告 SMTP 错误:密码命令失败:421 4.7.66 不支持 TLS 1.0 和 1.1。请upgrade/update您的客户端支持 TLS 1.2。

注册的流套接字传输是 tcp、udp、unix、udg、ssl、sslv3、tls、tlsv1.0、tlsv1.1、tlsv1.2

它怎么可能在大多数时间都有效。如果它真的是一个 TLS 问题,我预计它会在 100% 的时间内失败。

来自微软:

将引入新的提交错误速度提示

我们充分意识到,许多客户不会注意到多个消息中心帖子和博客帖子,并且不知道仍在使用 TLS1.0 提交消息的客户端或设备。考虑到这一点,从 2021 年 9 月开始,我们将拒绝一小部分使用 TLS1.0 进行 SMTP AUTH 的连接。客户应像处理提交期间可能发生的任何其他临时错误一样重试。随着时间的推移,我们将增加拒绝连接的百分比,导致发送延迟,越来越多的客户应该注意到这一点。错误将是:

421 4.7.66 不支持 TLS 1.0 和 1.1。请 upgrade/update 您的客户端支持 TLS 1.2。访问 https://aka.ms/smtp_auth_tls.

我们打算在准备好进行更改以对常规端点的 SMTP AUTH 禁用 TLS1.0 和 TLS1.1 时发布最终公告。

可在此处找到其他文档:使用 SMTP AUTH 为旧版 TLS 客户端选择加入 Exchange Online 端点

交换运输队

Java 申请也是如此。

我必须在 SMTP 属性中强制使用 TLS v1.2。 就我而言:

config.put("mail.smtp.ssl.protocols", "TLSv1.2");

希望你能找到答案。

我发现升级我的服务器 PHP 版本 运行 有助于解决这个问题。我以前是 运行 版本 5.*,尽管试图强制脚本使用更新版本的 TLS,但它仍然 运行 进入了 MS 已经到位的 speedbump。将我的 PHP 版本升级到 7.4 版本解决了这个问题,此后我再也没有看到被拒绝的电子邮件。