我有几个网站使用SwiftMailer和Gmail。我还没有触及这些网站中的任何一个网站。代码,突然所有这些都不再起作用,导致致命错误:无法与主机smtp.gmail.com建立连接[#0]
我已经在互联网上搜索了可能导致这种情况的原因,尝试了几种解决方案,但没有任何效果。有人知道在Gmail结束时是否有任何改变(他们不再允许我连接?)或者还有什么可能发生的?
我尝试过的一些事情:
我知道这不是一个非常具体的编码问题,但我没有对我的代码进行任何改动,所以问题确实不在我的代码中。我只是希望有人知道2-3天前发生的变化,以及我需要做些什么来让SwiftMailer再次运作。
注意:Gmail帐户'密码或帐户安全设置(如两步验证和排序)也没有变化。此外,使用不同的SMTP,如来自GMX.net的SMTP,脚本仍然可以正常工作!
奇怪的嗯?
答案 0 :(得分:3)
我今天遇到了同样的问题。我成功地尝试了本网站中提到的解决方法。
Gmail配置中的某些内容已更改。我将尝试更好的解决方案,但同时将使用此解决方法。
希望有所帮助。
https://github.com/swiftmailer/swiftmailer/issues/544
您可以通过修改功能来禁用SSL检查 StreamBuffer.php中的“_establishSocketConnection”。添加这些行 在stream_socket_client命令之前:
$options['ssl']['verify_peer'] = FALSE; $options['ssl']['verify_peer_name'] = FALSE;
答案 1 :(得分:1)
我强烈建议您查看日志插件。 https://swiftmailer.symfony.com/docs/plugins.html#logger-plugin
可能已经安装了,所以您只需按照此处的说明操作,如果您运行记录器,它将为您提供电子邮件失败的原因。
答案 2 :(得分:0)
虽然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]
]);
}