Php 如何解决“无法与主机smtp.gmail.com建立连接”的问题?

Php 如何解决“无法与主机smtp.gmail.com建立连接”的问题?,php,laravel,smtp,sendmail,laravel-forge,Php,Laravel,Smtp,Sendmail,Laravel Forge,如果我在我的本地主机上发送电子邮件,它就会工作。无误 但我在临时服务器上进行了尝试,它显示如下错误: Swift_TransportException in StreamBuffer.php line 268: Connection could not be established with host smtp.gmail.com [Connection timed out #110] in StreamBuffer.php line 268 at Swift_Transport_Stream

如果我在我的本地主机上发送电子邮件,它就会工作。无误

但我在临时服务器上进行了尝试,它显示如下错误:

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

in StreamBuffer.php line 268
at Swift_Transport_StreamBuffer->_establishSocketConnection() in StreamBuffer.php line 62
at Swift_Transport_StreamBuffer->initialize(array('protocol' => 'tcp', 'host' => 'smtp.gmail.com', 'port' => '587', 'timeout' => '30', 'blocking' => '1', 'tls' => true, 'type' => '1', 'stream_context_options' => array())) in AbstractSmtpTransport.php line 113
at Swift_Transport_AbstractSmtpTransport->start() in Mailer.php line 79
at Swift_Mailer->send(object(Swift_Message), array()) in Mailer.php line 395
at Mailer->sendSwiftMessage(object(Swift_Message)) in Mailer.php line 217
...
我的环境是这样的:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=secret@gmail.com
MAIL_PASSWORD=secret
MAIL_ENCRYPTION=tls
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
从谷歌上的一些参考资料中,我尝试了一些答案。我尝试将邮件端口和邮件加密更改为:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=secret@gmail.com
MAIL_PASSWORD=secret
MAIL_ENCRYPTION=tls
MAIL_PORT=465
MAIL_ENCRYPTION=ssl
它不起作用

我再次尝试更改此选项:

MAIL_DRIVER=sendmail
它也不起作用

我在这里做:

都一样

我尝试:

php artisan cache:clear
php artisan config:cache
它仍然不起作用

我的服务器使用gitlab、forge laravel和digital ocean

以前在暂存服务器上发送邮件是有效的,但在我将存储库重新安装到forge laravel上之后,它现在就不起作用了


我需要设置什么

几天前,我遇到了完全相同的问题,我到处搜索,比如laracast stackoverflow和许多github问题,最终解决了这个问题

你需要这样的配置

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=youremail@gmail.com
MAIL_PASSWORD=yourpassword
MAIL_ENCRYPTION=ssl
在此设置之后,您应该确保您的google帐户2步骤验证已关闭,因为这增加了额外的安全层,这就是无法建立连接的原因

我认为这是谷歌最近增加的新功能。我以前使用过邮件配置,但最近相同的代码不起作用

您可以转到您的谷歌帐户,在那里您将看到登录和安全选项卡。点击它,然后你会看到2步验证。然后你需要关掉它。那我想它会起作用的

这件事对我有用,我希望对你也有用。
我希望您能理解。

这是因为您的暂存服务器中的“发送邮件”配置。 有两种解决方案可用。 一个是,用你的域名为ex创建一个电子邮件地址,example@domainname.com然后使用提供商提供的设置更改电子邮件配置。
2对于另一个解决方案,需要了解您的laravel版本。

因为您没有提到您的服务器设置,所以我认为这可能与SELinux布尔有关

如果SELinux处于强制模式,则需要打开httpd_can_sendmail和httpd_can_network_connect booleans

您可以通过运行以下命令来验证SELinux状态是否正在强制执行:

$ sestatus
...
Current mode: enforcing
...
检查httpd sendmail和网络连接布尔值的状态:

$ getsebool httpd_can_sendmail httpd_can_network_connect
httpd_can_sendmail --> off
httpd_can_network_connect --> off
要启用sendmail和network connect并使更改在重新启动时保持不变,请执行以下操作:

$ sudo setsebool -P httpd_can_sendmail 1
$ sudo setsebool -P httpd_can_network_connect 1

您需要在env文件中用MAIL\u-MAILER关键字替换MAIL\u驱动程序。

与“我的问题”中的描述类似,我尝试过更改邮件端口和邮件加密。但都是一样的。我刚刚在登录和我帐户的安全性上看到了两步验证。这不管用吗?我有同样的问题,并与上述代码。但我能弄清楚这到底是怎么回事。我用全部错误更新了我的问题。也许你能解决这个问题problem@SuccessMan我将尝试从这个链接,我已经尝试了所有。只有两个答案我没试过。来自李偉成 还有约翰·福利。你试试看。我不知道放在哪里。如果您知道,您可以给我另一个答案确保APP_密钥已写入您的.env文件打开此链接:单击启用。并保存它。然后再次尝试发送电子邮件。“对我来说,它起作用了。”海伦格厄尔你没有看到我问题中的描述吗?我试过了。但在.env文件中更改驱动程序的方法是一样的,比如:'driver'=>'sendmail',@HirenGohel我已经尝试了所有这些。你试着仔细观察我的问题好的,我的7.1.11版,我尝试了整个解决方案,面对同样的问题,所以如果你有更多的问题,请告诉我!