带有 Gmail SMTP 的 SwiftMailer 突然停止工作:无法与主机建立连接 smtp.gmail.com [#0]

SwiftMailer with Gmail SMTP suddenly stopped working: Connection could not be established with host smtp.gmail.com [ #0]

我有几个网站将 SwiftMailer 与 Gmail 结合使用。我没有触及这些网站的任何代码,突然间它们都不再工作,导致致命错误:无法与主机建立连接 smtp.gmail.com [#0]

我在互联网上搜索了可能导致此问题的原因,尝试了多种解决方案,但均无济于事。有谁知道 Gmail 端是否发生了某些变化(他们不再允许我连接?)或者可能发生了什么?

我试过的一些东西:

我知道这不是一个非常具体的编码问题,但我没有对我的代码进行任何更改,因此问题实际上不可能出现在我的代码中。我只是希望有人知道 2-3 天前发生了什么变化,以及我需要做什么才能让 SwiftMailer 再次工作。

注意:Gmail 帐户的密码或帐户安全设置(例如两步验证和排序)也没有更改。此外,使用不同的 SMTP,例如来自 GMX.net 的 SMTP,该脚本仍然可以正常工作!

奇怪嗯?

我强烈建议您查看日志插件。 https://swiftmailer.symfony.com/docs/plugins.html#logger-plugin

它可能已经安装,所以您需要做的就是按照此处的说明进行操作,如果您 运行 记录器,它会告诉您电子邮件失败的原因。

我今天遇到了同样的问题。我成功尝试了此网站中提到的解决方法。

Gmail 配置中的某些内容已更改。我会尝试更好的解决方案,但同时会使用此解决方法。

希望对您有所帮助。

https://github.com/swiftmailer/swiftmailer/issues/544

You could disable the SSL check by modifying the function "_establishSocketConnection" in StreamBuffer.php. Add these lines before stream_socket_client command:

$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;

虽然 Toni 的解决方案有效,但它需要摆弄供应商来源,这并不理想。您还可以在代码中以编程方式设置流选项,您可以在其中使用 swiftmailer $mailer 实例,例如

$transport = $mailer->getTransport();
if($transport instanceof \Swift_Transport_EsmtpTransport){
    $transport->setStreamOptions([
        'ssl' => ['allow_self_signed' => true, 'verify_peer' => false, 'verify_peer_name' => false]
    ]);
}