【发布时间】:2015-02-27 13:02:00
【问题描述】:
我正在尝试使用本地主机的 Laravel 从 Gmail 发送电子邮件。我收到此错误:无法与主机 smtp.gmail.com 建立连接 [#0]
我正在使用端口 465 的 ssl。我也尝试了 587,但它不起作用。
我也试过this,但没用。我发现很多人遇到同样的问题,但我找到的解决方案不起作用。
【问题讨论】:
我正在尝试使用本地主机的 Laravel 从 Gmail 发送电子邮件。我收到此错误:无法与主机 smtp.gmail.com 建立连接 [#0]
我正在使用端口 465 的 ssl。我也尝试了 587,但它不起作用。
我也试过this,但没用。我发现很多人遇到同样的问题,但我找到的解决方案不起作用。
【问题讨论】:
编者注:禁用 SSL 验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以冒充一个受信任的端点(例如 GitHub 或其他一些远程 Git 主机),您将容易受到 Man-in-the-Middle Attack 的攻击。
在将其用作解决方案之前,请确保您完全了解安全问题。
在 Laravel 项目目录中,编辑 config/mail.php 并添加以下内容:
'stream' => [
'ssl' => [
'allow_self_signed' => true,
'verify_peer' => false,
'verify_peer_name' => false,
],
]
它对我有用。
仅供参考,我的 SMTP 设置是:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=[Full Gmail Address]
MAIL_PASSWORD=[Google App Password obtained after two step verification on Google Account Page]
MAIL_ENCRYPTION=ssl
【讨论】:
编者注:禁用 SSL 验证具有安全隐患。如果不验证 SSL/HTTPS 连接的真实性,恶意攻击者可以冒充一个受信任的端点(例如 GitHub 或其他一些远程 Git 主机),您将容易受到 Man-in-the-Middle Attack 的攻击。
在将其用作解决方案之前,请确保您完全了解安全问题。
我遇到了同样的错误:无法与主机 smtp.gmail.com [#0] 建立连接,并按照此处概述的步骤操作:https://github.com/swiftmailer/swiftmailer/issues/544。
尝试在 Swift/Transport/StreamBuffer.php 的第 263 行将以下几行添加到 _establishSocketConnection():
$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;
请注意,这不是一个完美的解决方案,因为它涉及:a) 攻击可能在 SwiftMailer 更新中被覆盖的核心代码,b) 由于您不再验证连接,因此会降低应用的安全性。但作为一种临时解决方法,它对我有用。
【讨论】:
.env 文件中的这一行更改将使其工作
MAIL_DRIVER=sendmail
如果也没有效果尝试切换邮件端口
MAIL_PORT=587
或者
MAIL_PORT=465
仅当您在 google 帐户下启用“允许不太安全的应用程序访问”时,这才有效
【讨论】:
在您的 .env 文件中,您需要设置您的电子邮件帐户的电子邮件地址和密码:
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=test@gmail.com
MAIL_PASSWORD=testpassword
在mail.php中
<?php
return [
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'yourEmail@gmail.com', 'name' => 'Your Title'],
'encryption' => 'tls',
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
];
并清除配置缓存:
php artisan config:cache
【讨论】:
这就是我的工作
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<your email>
MAIL_PASSWORD=<your app password>
MAIL_ENCRYPTION=tls
如果您使用您的帐户进行两次身份验证,则应生成新的应用密码并用于您的 env 文件。这就是我的工作。
【讨论】:
您是否尝试过将加密更改为 tls?我目前使用 Gmail SMTP 服务器从我的 Laravel 应用程序发送电子邮件。我使用 TLS 和端口 587
【讨论】:
在 localhost 你可以设置你的 MAIL_DRIVER=smtp 但在像 cpanel 这样的真实服务器上你必须设置 MAIL_DRIVER=sendmail 并编辑你的 config/mail.php '默认' => env('MAIL_MAILER', 'sendmail'), 但这不是一个好主意,因为在您在 google 上发送邮件后,您会在 gmail 上收到如下错误:
小心这条信息 Gmail 无法验证它是否确实来自 tenetup.reminderme@gmail.com。避免点击链接、下载附件或回复个人信息。
【讨论】:
将 .env 和 mail.php 中的邮件驱动程序更改为 MAIL_DRIVER=mailgun
【讨论】: