通过Laravel使用gmail smtp:[连接超时#110]

时间:2016-06-17 09:43:20

标签: php laravel email sendmail

在进行投票或复制之前,请阅读说明

我知道这个问题被多次询问并且有不同的解决方案,我已经尝试了所有但没有人工作过。这是我的设置。

 MAIL_DRIVER=smtp
 MAIL_HOST=smtp.gmail.com
 MAIL_PORT=465
 MAIL_USERNAME=abc@mydomain.com
 MAIL_PASSWORD=mypassword
 MAIL_ENCRYPTION=ssl

应用程序当前正在Centos 7操作系统上运行。

我总是得到

Swift_TransportException in StreamBuffer.php line 269: Connection could not be established with host smtp.gmail.com [Connection timed out #110]

at Swift_Transport_StreamBuffer->initialize(array('protocol' => 'ssl', 'host' => 'smtp.gmail.com', 'port' => '465', 'timeout' => '30', 'blocking' => '1', 'tls' => false, 'type' => '1', 'stream_context_options' => array())) in AbstractSmtpTransport.php line 113

我尝试了所有解决方案,取代:smtp.gmail.com with 173.194.65.108或替换smtp.gmail.com by gmail-smtp-msa.l.google.com。当我执行这两个步骤时,它找不到服务器错误。

如果我从smtp to sendmail or mail更改邮件驱动程序,则不会抛出任何错误,但不会发送电子邮件。

如果我使用smtp.gmail.com的ip地址,我得到了相同的结果。如果我从465 to 587更改端口并从ssl to tls更改加密,则不会发生任何事情。

我还在etc/gai.conf中创建了一个文件并放置了precedence ::ffff:0:0/96 100。它工作了一次。但是两个小时后,它停止工作并开始抛出相同的错误。

我也试过使用我的gmail id,但都是徒劳的。

我无法测试的唯一解决方案是验证httpd_can_sendmail每当我运行命令getsebool httpd_can_sendmail时,我得到getsebool: SELinux is disabled。这是问题还是有其他方法来解决它?

2 个答案:

答案 0 :(得分:1)

这是我的工作邮件配置文件:

return [
    'driver' => 'smtp',
    'host' => 'smtp.gmail.com',
    'port' => 587,
    'from' => ['address' => '*******@gmail.com', 'name' => '****'],
    'encryption' => 'tls',
    'username' => '*******@gmail.com',
    'password' => '*******',
    'sendmail' => '/usr/sbin/sendmail -bs',
];

但是从你的问题我可以看到你已经尝试了所有这些,所以我可以假设这是一个基于错误和连接超时的网络问题,我的意思是有什么东西阻止了你的连接,如果你有,可能是你的防火墙。

首先你应该检查端口587是否打开,或者你可以检查其他应用程序是否可以连接smtp.gmail.com(不知道如何在centOs中进行)。

最后这可能不是问题,但你必须启用“允许安全性较低的应用程序”。在您的谷歌帐户中只是为了测试。 (这不是永久的解决方案,但是对于测试,如果它有效,那么你应该在谷歌帐户启用两步验证,然后创建新的应用程序,你可以创建新的特殊密码,你可以使用它作为smtp服务器的密码)

答案 1 :(得分:0)

由于您使用的是 gmail,但我不知道您设置的密码是什么,因此 MAIL_PASSWORD 变量必须与 gmail 应用程序密码相同。在这种情况下,Gmail 提供了第三方应用服务,以便这些(在这种情况下是您的应用)可以使用这种类型的身份验证发送电子邮件。