当我尝试使用GMail SMTP通过Laravel发送电子邮件时,我遇到以下错误:
Swift_TransportException
Connection could not be established with host smtp.gmail.com [Connection timed out #110]
这是错误的痕迹:
...
}
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
if (false === $this->_stream) {
throw new Swift_TransportException(
'Connection could not be established with host ' . $this->_params['host'] .
' [' . $errstr . ' #' . $errno . ']'...
以下是我的邮件配置:
'driver' => 'smtp',
'host' => 'smtp.gmail.com',
'port' => 587,
'from' => array('address' => 'some@example.ir', 'name' => 'some'),
'encryption' => 'tls',
'username' => 'myemail@gmail.com',
'password' => 'mypassword',
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false
我使用共享主机,localhost上的端口587已打开。
答案 0 :(得分:36)
我遇到了同样的问题,我以这种方式解决了这个问题:
'driver' => 'sendmail',
您只需要更改该行。
答案 1 :(得分:13)
经过大量的研究后,我发现这个很有帮助。
https://www.google.com/settings/security/lesssecureapps
打开上面的链接。
单击“启用”。并保存它。
然后尝试再次发送电子邮件。
对我而言,它有效。
答案 2 :(得分:4)
使用laravel forge + digitalocean我遇到了同样的问题。
我在尝试telnet smtp.gmail.com 465
时发现telnet smtp.gmail.com 465
Trying 2404:6800:4003:c00::6d... # more than 30 sec
Trying 74.125.200.108... # less 1 sec
Connected to smtp.gmail.com.
可能是连接超时的IPv6。
所以,我改变gai.conf以优先ipv4而不是ipv6
vi /etc/gai.conf
#For sites which prefer IPv4 connections change the last line to
precedence ::ffff:0:0/96 100
...
# For sites which use site-local IPv4 addresses behind NAT there is
# the problem that even if IPv4 addresses are preferred they do not
# have the same scope and are therefore not sorted first. To change
# this use only these rules:
#
scopev4 ::ffff:169.254.0.0/112 2
scopev4 ::ffff:127.0.0.0/104 2
scopev4 ::ffff:0.0.0.0/96 14
答案 3 :(得分:4)
除了加密和端口以外,我的设置相同。改为:
'encryption' => ssl,
'port' => 465,
由于这仅适用于localhost,因此加密线也应该是特定于环境的。所以反过来我做了以下:
env('MAIL_ENCRYPTION','tls'),
现在你可以在.env文件中设置它,这是特定于环境的,应该是.gitignore
答案 4 :(得分:4)
问题是smtp.gmail.com正在解析IPv6地址,而Google服务只侦听IPv4。您需要做的是设置源IP以确保域解析为IPv4而不是IPv6。
重要的方法:
->setSourceIp('0.0.0.0')
如何在代码中使用它:
$this->_transport = Swift_SmtpTransport::newInstance
(
'smtp.gmail.com',
465,
'ssl'
)
->setUsername('username')
->setSourceIp('0.0.0.0')
->setPassword('password');
答案 5 :(得分:2)
通过更改我的.env文件解决了我的问题:
'driver' => 'sendmail',
答案 6 :(得分:1)
尝试
'encryption' => 'ssl',
'port' => 465,
答案 7 :(得分:0)
错误可能是由于启用了2步验证。在这种情况下,您需要创建gmail应用程序密码并将其用作密码。
答案 8 :(得分:0)
如果是非Google Apps帐户,请务必按照建议启用安全性较低的应用。如果你不这样做,它将无法正常工作。
如果是Google Apps帐户(即商家帐户),则会有一个管理面板来管理访问权限。您需要确保它仅通过身份验证而不是IP来指定访问权限,因为如果是IP,则您的IP可能不在列表中。
最后要尝试的是使用smtp.gmail.com的IPv4地址代替代码中的域名。我发现我的域不会使用域连接(因为它解析为IPv6地址),但是当我在原地使用原始IP时会连接。
答案 9 :(得分:0)
我使用Swiftmailer
遇到了同样的问题无论如何,你不应该使用的快速脏黑客将编辑swiftmailer \ swiftmailer \ lib \ classes \ Swift \ Transport \ StreamBuffer.php。在_establishSocketConnection()第253行替换:
$options = array();
有这样的事情:
$options = array('ssl' => array('allow_self_signed' => true, 'verify_peer' => false));
这会改变stream_context_create()的ssl选项($ options下面几行):
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno,
$errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
有一个肮脏的黑客攻击
我的ENV也设置为
MAIL_DRIVER=smtp
MAIL_HOST=mail.mydomain.com
MAIL_PORT=587
MAIL_USERNAME=noreply@mydomain.com
MAIL_PASSWORD=mypassword
答案 10 :(得分:0)
在您的终端中使用此命令
sudo ufw允许在“Postfix提交”中 这启用SMTP端口587
答案 11 :(得分:0)
您需要在Google帐户中创建2因子身份验证和自定义密码。另外,请不要忘记为您正在使用的每个新主机添加自定义密码。
答案 12 :(得分:0)
对于临时修复,您可以通过将环境文件更新为'driver'=>'sendmail'
来解决此问题答案 13 :(得分:0)
检查可用磁盘空间。就我而言,我有100%使用过。
答案 14 :(得分:0)
打开您的.env文件并更改它
MAIL_DRIVER=smtp
TO
MAIL_DRIVER=sendmail
这解决了我的问题,希望对您有所帮助。
答案 15 :(得分:0)
对我来说,在尝试了上述所有解决方案后,唯一对我有用的是 暂时禁用我的防火墙和防病毒软件
答案 16 :(得分:0)
我在 MAC 上使用 MAMP。我在 MAC 上遇到了这个问题,需要遵循的步骤来解决这个问题
sudo vim /etc/postfix/sasl_passwd
smtp.gmail.com:587 username@gmail.com:password
sudo postmap /etc/postfix/sasl_passwd
sudo vim /etc/postfix/main.cf
relayhost=smtp.gmail.com:587
smtp_sasl_auth_enable=yes
smtp_sasl_password_maps=hash:/etc/postfix/sasl_passwd
smtp_use_tls=yes
smtp_tls_security_level=encrypt
tls_random_source=dev:/dev/urandom
smtp_sasl_security_options = noanonymous
smtp_always_send_ehlo = yes
smtp_sasl_mechanism_filter = plain
sudo postfix stop
sudo postfix start
mailq
您的 .env 配置应如下所示
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME="username@gmail.com"
MAIL_PASSWORD="password"
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="username@gmail.com"
MAIL_FROM_NAME="${APP_NAME}"