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



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

我在互联网上搜索了所有可能导致这种情况的原因,尝试了几种解决方案,但都不起作用。有人知道Gmail端是否发生了变化(他们不再允许我连接?)或者还会发生什么吗?

我试过的一些东西:

  • 打开服务器路由器上的端口(465用于SSL)-没有帮助
  • 禁用服务器上的防火墙-没有帮助
  • 尝试使用smtp.gmail.com的IP地址而不是域名,使用ping来查找IP-没有帮助
  • 更改SwiftMailer程序中的设置(将某些验证选项设置为false)-没有帮助

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

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

奇怪吧?

我今天遇到了同样的问题。我成功地尝试了这个网站上提到的解决方法。

Gmail配置中发生了一些更改。我会尝试一个更好的解决方案,但同时也会使用这个变通方法。

希望能有所帮助。

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

您可以通过修改函数来禁用SSL检查&quot_建立套接字连接";在StreamBuffer.php中。添加这些行stream_socket_client命令之前:

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

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

它可能已经安装好了,所以你只需要按照这里的说明操作,如果你运行记录器,它会告诉你电子邮件失败的原因。

虽然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]
]);
}

最新更新