Laravel 5.2 邮件发送中的 Swift_TransportException

Posted

技术标签:

【中文标题】Laravel 5.2 邮件发送中的 Swift_TransportException【英文标题】:Swift_TransportException in Laravel 5.2 mail sending 【发布时间】:2016-05-23 04:35:51 【问题描述】:

我正在尝试使用 允许不太安全的应用程序:打开两步验证关闭

的 gmail 帐户为我的 laravel 应用程序发送邮件

.env 邮件部分:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=library@gmail.com
MAIL_PASSWORD=********
MAIL_ENCRYPTION=ssl

config/mail.php

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'library@gmail.com', 'name' => 'Admin'],
'encryption' => env('MAIL_ENCRYPTION', 'ssl'),
'username' => env('library@gmail.com'),
'password' => env('********'),
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => env('MAIL_PRETEND', false),

首先我尝试使用'encryption' => env('MAIL_ENCRYPTION','tls')。但收到以下错误消息:

ERROR: exception 'Swift_TransportException' with message 'Expected
response code 250 but got code "530", with message "530-5.5.1
Authentication Required. Learn more at 
530 5.5.1  https://support.google.com/mail/answer/14257  
z3sm16020712par.17 - gsmtp"' in
/home/shafi/Projects/Lib/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:383

我访问了https://support.google.com/mail/answer/14257,发现一切都处于推荐状态。

之后我使用了'encryption' => env('MAIL_ENCRYPTION','ssl'),但这次是相同的ERROR

我应该怎么做才能修复错误?我错过了什么?

【问题讨论】:

【参考方案1】:

访问 http://www.google.com/accounts/DisplayUnlockCaptcha 并使用您的 Gmail 用户名和密码登录。如果被问到,请输入扭曲图片中的字母。

注意:如果这仍然没有帮助,请重试该过程几次并等待,然后尝试从您的 Laravel 应用程序发送电子邮件。这应该可以解决问题。

【讨论】:

你的代码没问题。但是,Gmail 不允许您的 Laravel 应用程序登录到您的 Gmail 帐户,这就是您遇到此问题的原因。在这种情况下,请确保您已从 Gmail 帐户活动选项中允许您的 Laravel 应用程序,并尝试从允许不太安全的应用程序访问选项中更改一些设置。 如何允许来自 Gmail 帐户的 Laravel 应用程序?我试着做,但做不到。【参考方案2】:

第 1 步:将您的 config/mail.php 恢复为原始文件。 config/mail.php 应该是这样的

'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.mailgun.org'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'library@gmail.com', 'name' => 'Admin'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => env('MAIL_USERNAME'),
'password' => env('MAIL_PASSWORD'),
'sendmail' => '/usr/sbin/sendmail -bs',

第 2 步:.env 文件应该是这样的

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=library@gmail.com
MAIL_PASSWORD=whateverisyourpassword
MAIL_ENCRYPTION=ssl

端口是 465 而不是 587

第 3 步:通过粘贴适当的控制器函数来测试以下代码

\Mail::raw('This is an test e-mail', function ($message) 
    $message->to("someone@gmail.com", "someone");
    $message->subject("hi checking");
    $message->getSwiftMessage();
);

P.S:如果对 .env 文件进行了一些更改,永远不要忘记停止然后使用 php artisan serve 重新启动服务器。如果没有,那么您可能会被卷入时间迷宫

【讨论】:

感谢您的努力。我试过了,但得到了同样的错误。 你确定你没有错过任何东西吗?我用两个不同的 gmail 帐户在 laravel 5.2 中测试了上面的代码,它正在工作。 您能分享您的项目存储库或与发送邮件相关的文件吗? 没有。以多种方式尝试但以相同的错误结束。 尝试将您的代码提供给新人。也许他们能找到你错过的东西【参考方案3】:

对我来说,发送邮件只需在 .env 文件中添加正确的信息,如下所示:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_gmail_email
MAIL_PASSWORD=your_gmail_password
MAIL_ENCRYPTION=tls

不要更改 mail.php 文件中的任何内容。您不希望到处都是您的电子邮件凭据。 .env 文件是用来存储所有这些的。

我还在该 Gmail 帐户上打开了对“不太安全的应用程序”的访问权限。

最后,运行:php artisan config:cache

希望对您有所帮助。

【讨论】:

【参考方案4】:

我之前也遇到过同样的问题,根本原因是我更改了mail.php文件。

要使用 smtp.gmail.com 发送电子邮件,您只需更改 .env 文件中的配置并启用允许不太安全的应用程序。不要更改 mail.php 文件中的任何内容。

【讨论】:

【参考方案5】:

我建议您花时间阅读:

https://phpnotebook.com/how-to-fix-swift_transportexception-530-in-laravel-5-7.html

【讨论】:

网址已更改:phpnotebook.com/… 这是一个不只分享链接答案的真实例子..

以上是关于Laravel 5.2 邮件发送中的 Swift_TransportException的主要内容,如果未能解决你的问题,请参考以下文章

无法在 laravel 5.2 中发送没有发件人地址的消息我已经设置了 .env 和 mail.php

在 Laravel 5.2 中使用 mailchimp API

使用Laravel发送电子邮件错误“类Swift_Transport_Esmtp_AuthHandler不存在”

laravel 中的 Swift_TransportException 错误

如何通过邮件方法将数据从 ajax 传输到 laravel 5.2 控制器

如何在laravel 5.2登录时检查电子邮件(确认/否)?