Laravel 邮件发送 Amazon SES 不再支持 TLS 1.0 和 TLS 1.1 连接

Laravel mail send Amazon SES no longer supports TLS 1.0 and TLS 1.1 connections

提问人:Elio Chamy 提问时间:11/13/2023 最后编辑:lemElio Chamy 更新时间:11/19/2023 访问量:1161

问:

我在 Ubuntu EC2 上使用 Laravel 5.1 和 PHP 5.6.40。我有一个非常大的项目,无法在几个小时或几天内更新。 我的服务器版本是 OpenSSL 1.1.1,我已经从我的 PC 到我的网站进行了测试,并且我得到了 HTML 页面的成功响应。 我还检查了我的 Ubuntu 上的 OpenSSL 版本curl --tlsv1.2 mywebsite.com

openssl s_client -connect mywebsite.com:443 -tls1_2

我得到了“CONNECTED”响应。我还检查了支持 tls1.2 的 Swift Mailer 版本 5.4.12。

但是在Laravel中崩溃了,并带有消息的错误异常mail::sendSwift_TransportExceptionExpected response code 250 but got code "554", with message "554 Access denied: Amazon SES no longer supports TLS 1.0 and TLS 1.1 connections. You must update your client to use TLS version 1.2 or above.

如果我检查的所有版本都支持 tls 1.2,我不知道是什么原因导致了问题。PHP的:5.6.40,Openssl:1.1.11

Laravel Amazon-Web-Services 电子邮件 SSL Amazon-SES

评论

1赞 Maarten Bodewes 11/13/2023
我投了这个票,希望其他人遇到这个错误。但是,请理解,我们无权访问您的软件配置,因此帮助可能会受到限制。我在想也许有什么东西在强制使用较旧的连接,例如 DH 证书,但这对我来说似乎不太可能......
1赞 Mark B 11/13/2023
你看过这里的讨论吗?github.com/swiftmailer/swiftmailer/issues/598

答:

3赞 Elio Chamy 11/14/2023 #1

解决: 如果您的服务器中启用了正确版本的 open ssl、php 和 tls1.2,但在 swiftmailer 中仍然面临此问题

转到 laravel root,然后是 vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport

打开 streambuffer.php 查找 startTLS() 函数

将其替换为

公共函数 startTLS() { 返回 stream_socket_enable_crypto($this->_stream, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); }

现在 Swift 将只使用 TLS 1.2

这是一个使用 php 5.6 和 laravel 5.1 的解决方案