繁体   English   中英

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

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

We have PHP web application that sends SMTP emails via authenticated smtp.office365.com. 这至少已经工作了几年。

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

这是奇怪的事情。 大约 75% 的时间它工作正常。 rest 报告 SMTP 错误:密码命令失败:421 4.7.66 不支持 TLS 1.0 和 1.1。 请升级/更新您的客户端以支持 TLS 1.2。

Registered Stream Socket Transports is 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。 请升级/更新您的客户端以支持 TLS 1.2。 访问 https://aka.ms/smtp_auth_tls。

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

可在此处找到其他文档:Opt-in to Exchange Online endpoint for legacy TLS clients using SMTP AUTH

交换传输团队

我无法回复马克的回答(没有足够的声誉)。

我遇到了同样的问题和同样的错误,并且很难回答 MS 遇到减速带问题。 该减速带问题不应影响使用 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT 的任何人。 我遇到了同样的问题,所以我将 class.smtp.php 中的 PHPMailer 代码更改为此代码,以使 TLSv1.2 成为首选方法。 但我看不出这与指定 STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT 的 OP 有何不同。 (顺便说一句,这些加密方法的定义在 PHP 5.6.7 中发生了变化。请参阅https://www.php.net/manual/en/function.stream-socket-enable-crypto.php#119122

if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
    $crypto_method = STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
    $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
    $crypto_method |= STREAM_CRYPTO_METHOD_TLS_CLIENT;
}
else {
    $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
}
    
if(!stream_socket_enable_crypto($this->smtp_conn, true, $crypto_method)) {
    return false;
}

我还使用 WireShark 捕获数据包并验证正在使用 TLS 1.2。 即使单独使用 STREAM_CRYPTO_METHOD_TLS_CLIENT,我在 WireShark 中也看到了 TLS 1.2,所以我有点困惑。 无论 TLS 版本如何,此减速带都适用吗? 我不这么认为,但如果不是,那么为什么有效的 TLS 1.2 连接会出现该错误?

在 Java 应用程序上也是如此。

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

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

希望你能找到答案。

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

我遇到了与此完全相同的问题,并且几个月来一直让我发疯。 我也试图强制使用 crypto_method 但这似乎并没有解决问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM