在Laravel邮件中出现“连接无法与主机smtp.gmail.com建立,网络不可达#101错误”的问题

8

我正在尝试从我的Laravel 5.1系统发送电子邮件。我可以从本地主机发送电子邮件,但无法从服务器发送。请查看我的.env文件中的电子邮件配置设置:

MAIL_DRIVER=smtp
MAIL_HOST= smtp.gmail.com
MAIL_PORT= 587
MAIL_USERNAME= username***@gmail.com
MAIL_PASSWORD= *********
MAIL_ENCRYPTION=tls

这个配置只在我的本地有效。在服务器上,我得到了这个错误:

Swift_TransportException in StreamBuffer.php line 268:
Connection could not be established with host smtp.gmail.com [Network is unreachable #101]

我还尝试将 MAIL_PORT587 更改为 465,并将 MAIL_ENCRYPTIONtls 更改为 ssl。但是我仍然遇到相同的错误。我该如何解决这个问题?


请检查“允许不安全的应用程序”:开启(https://www.google.com/settings/security/lesssecureapps) - AddWeb Solution Pvt Ltd
5个回答

37

我使用以下代码在 cpanel 中解决了我的问题:

change MAIL_DRIVER=smtp to MAIL_DRIVER=sendmail in ".env" file

它对我也有效。为什么它有效?有人知道原因吗? - Bhavin
1
它正在工作。我也很惊讶。应该有人解释一下。 - Kenneth mwangi
它并没有解决问题,因为它使用本地SMTP服务器发送电子邮件,而不是您设置的主机。您可以尝试输入错误的邮件驱动程序、用户名和密码,它仍然会“工作”。但这并不推荐。 - Nikolai Kiselev
这个方法可行是因为服务器没有调用Gmail服务器,而是使用sendmail服务发送电子邮件。 - minhhq
那么你会推荐什么来解决这个问题呢?@minhhq - Nur Uddin
无法与主机smtp.gmail.com建立连接,这意味着防火墙问题,请检查iptable规则或托管提供商,并请求他们打开出站连接端口465、25、587。我在我的csf服务器上遇到了同样的问题。 - minhhq

2

1.) 在修改 .env 文件配置后,需要在服务器上清除缓存。

php artisan cache:clear;
php artisan config:cache;

如果错误仍然出现

"连接被拒绝"是一个非常明确和清晰的错误信息。这意味着由于远程端主动拒绝连接,套接字连接无法建立。

谷歌阻止连接的可能性非常小。

很可能是您的网络托管提供商设置了防火墙,阻止端口465上的外部连接,或者他们正在阻止通过SMTP发送邮件到Gmail。 465是安全SMTP的“错误”端口,尽管它经常被使用,并且Gmail确实在那里监听。请尝试使用端口587。如果连接仍被拒绝,请联系您的主机并询问原因。


2

本地主机 -> 已工作
生产环境 -> 未工作
请检查您的生产防火墙策略或托管提供商策略是否阻止电子邮件端口(因为这些端口被严重垃圾邮件攻击)


1

访问您的服务器并编辑nano /etc/csf/csf.conf

SMTP_ALLOWUSER = "cpanel,yourusr"


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接