使用 gmail 对 SMTP 服务器错误进行身份验证失败
Posted
技术标签:
【中文标题】使用 gmail 对 SMTP 服务器错误进行身份验证失败【英文标题】:Failed to authenticate on SMTP server error using gmail 【发布时间】:2016-02-29 14:15:12 【问题描述】:我正在尝试为我的第一个 laravel 项目设置电子邮件,很高兴有一个 laracast:https://laracasts.com/lessons/mailers
我已经按照简单的步骤,在 mail.php 中选择了 gmail(为匿名添加了 x):
'driver' => env('MAIL_DRIVER', 'smtp'),
'host' => env('MAIL_HOST', 'smtp.gmail.com'),
'port' => env('MAIL_PORT', 587),
'from' => ['address' => 'dianexxxxx@gmail.com', 'name' => 'Diane Kaplan'],
'encryption' => env('MAIL_ENCRYPTION', 'tls'),
'username' => 'dianexxxxx@gmail.com',
'password' => 'xxxxx',
'sendmail' => '/usr/sbin/sendmail -bs',
'pretend' => false,
.env 有(为匿名添加了 x)- laracast 没有让我们使用 MAIL_USERNAME 和 MAIL_PASSWORD,但是假设我稍后会从那里拉出来,它们已经更新了,以备不时之需:
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=dianexxxxx@gmail.com
MAIL_PASSWORD=xxxxxx
MAIL_ENCRYPTION=null
但在尝试发送邮件的第一个关键时刻(3:30 分),我收到了一个身份验证错误: AuthHandler.php 第 181 行中的 Swift_TransportException: 使用 3 个可能的身份验证器在用户名“dianexxxxx@gmail.com”的 SMTP 服务器上进行身份验证失败
基于对 *** 的一点阅读,我尝试在我的 gmail 设置中打开“访问不太安全的应用程序”,但错误没有改变。 (关于这个问题的其他帖子还有其他因素比我的问题更复杂)。
laravel.log(下)没有什么让我感到兴奋 - 有什么想法吗?
[2015-11-26 12:25:55] local.ERROR: exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username "dianekaplan@gmail.com" using 3 possible authenticators' in /home/vagrant/Code/Family-laravel/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:181
Stack trace:
#0 /home/vagrant/Code/Family-laravel/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php(307): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport))
#1 /home/vagrant/Code/Family-laravel/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php(118): Swift_Transport_EsmtpTransport->_doHeloCommand()
#2 /home/vagrant/Code/Family-laravel/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php(79): Swift_Transport_AbstractSmtpTransport->start()
#3 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(395): Swift_Mailer->send(Object(Swift_Message), Array)
#4 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Mail/Mailer.php(181): Illuminate\Mail\Mailer->sendSwiftMessage(Object(Swift_Message))
#5 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(220): Illuminate\Mail\Mailer->send('emails.welcome', Array, Object(Closure))
#6 /home/vagrant/Code/Family-laravel/app/Http/routes.php(59): Illuminate\Support\Facades\Facade::__callStatic('send', Array)
#7 /home/vagrant/Code/Family-laravel/app/Http/routes.php(59): Illuminate\Support\Facades\Mail::send('emails.welcome', Array, Object(Closure))
#8 [internal function]: App\Providers\RouteServiceProvider->closure()
#9 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php(155): call_user_func_array(Object(Closure), Array)
#10 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Routing/Route.php(130): Illuminate\Routing\Route->runCallable(Object(Illuminate\Http\Request))
#11 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(704): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request))
#12 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\closure(Object(Illuminate\Http\Request))
#13 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(139): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#14 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#15 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#16 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(706): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#17 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(671): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#18 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Routing/Router.php(631): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#19 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(236): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#20 [internal function]: Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\closure(Object(Illuminate\Http\Request))
#21 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(139): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#22 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#23 [internal function]: Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#25 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#26 [internal function]: Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#28 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(62): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#29 [internal function]: Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#31 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#32 [internal function]: Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#33 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#34 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#35 [internal function]: Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#36 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#37 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(42): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#38 [internal function]: Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(124): call_user_func_array(Array, Array)
#40 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\closure(Object(Illuminate\Http\Request))
#41 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(Illuminate\Http\Request))
#42 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(122): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#43 /home/vagrant/Code/Family-laravel/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(87): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#44 /home/vagrant/Code/Family-laravel/public/index.php(54): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#45 main
【问题讨论】:
【参考方案1】:您是否打开了“允许安全性较低的应用”?去这个链接
https://myaccount.google.com/security#connectedapps
查看登录和安全 -> 具有帐户访问权限的应用菜单。
您必须打开“允许安全性较低的应用”选项。
如果仍然不起作用,请尝试以下方法之一:
转到https://accounts.google.com/UnlockCaptcha,然后单击继续 并解锁您的帐户以通过其他媒体/网站访问。
在您的密码中使用双引号:“您的密码”
并更改您的 .env 文件
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=dianexxxxx@gmail.com
MAIL_PASSWORD=xxxxxx
MAIL_ENCRYPTION=tls
因为只有在 .env 文件中没有该值时才会使用您在 mail.php 中指定的值。
【讨论】:
谢谢,米兰!是的,我尝试了第一个建议,但其他两个是新的。我只是做了他们两个(并且做了工匠缓存:清除和工匠配置:缓存),但遗憾的是我得到的错误仍然没有改变:( 您是否收到电子邮件,告知您的登录尝试被 gmail 阻止? 谢谢!我现在已经更新了这个(包括主机和端口),好消息是我现在已经转向一个新错误(进展!):预期响应代码 250 但得到代码“535”,消息“535- 5.7.8 用户名和密码不被接受。了解更多信息,请致电 535 5.7.8 support.google.com/mail/answer/14257 h19sm6150583qgd.37 - gsmtp " 我遇到了同样的错误,问题是没有打开不太安全的应用程序的访问权限,即使我打开了它。试试这个新链接google.com/settings/security/lesssecureapps 我也打开了它,当我刷新页面时,它又关闭了。我再次打开它并刷新并检查。重复此操作,直到默认选择打开。我知道这很疯狂,但这对我有用:D 谢谢@MilanMaharjan。也为我工作!【参考方案2】:您的方法没有问题,这是 G-mail 安全问题。
登录 g-mail 帐户设置。
启用两步验证。
Generate app-password.
使用新生成的密码代替您的真实 g-mail 密码。
别忘了清除缓存。
php artisan config:cache.
php artisan config:clear.
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=yourgmailid@gmail.com
MAIL_PASSWORD=generatedAppPassword
MAIL_ENCRYPTION=tls
【讨论】:
【参考方案3】:我就是这样解决这个问题的:
-
如下更改 .env 文件
-
更改 .env 文件后不要忘记重启服务器
【讨论】:
环境属性中的任何更改都需要重新启动服务器。【参考方案4】:我遇到了同样的问题,但是当我运行以下命令时,一切正常:
php artisan config:cache
【讨论】:
【参考方案5】:我遇到了同样的问题,我已经尝试了所有方法,但似乎没有任何效果,直到我将 config.php 中的“主机”值更改为:
'host' => env('smtp.mailtrap.io'),
当我更改它运行良好时,不知何故它使用了默认主机“smtp.mailtrap.org”并忽略了我设置的 .env 变量。
在进行了一些测试后,我意识到如果我按此顺序放置 env 变量,它将按应有的方式工作:
MAIL_HOST=smtp.mailtrap.io
MAIL_DRIVER=smtp
MAIL_PORT=2525
MAIL_USERNAME=xxxx
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=null
【讨论】:
【参考方案6】:如果您在发送电子邮件时仍然收到此错误:“无法使用 3 个可能的身份验证器在用户名“youremail@gmail.com”的 SMTP 服务器上进行身份验证”
您可以尝试以下方法之一:
转到https://accounts.google.com/UnlockCaptcha,点击继续并解锁您的帐户,以便通过其他媒体/网站访问。
使用双引号密码:“你的密码”这个也解决了我的问题。
【讨论】:
谢谢!在Laravel 7
为我工作。我的.env
文件:MAIL_PASSWORD="mypassword"
这对我有用...打开 UnlockCaptcha 链接时“请确保您的默认谷歌帐户(在我的情况下很多)是您re using SMTP" for (我以隐身方式打开了 smtp 帐户) ...否则它将确认您的默认帐户的此安全检查,并且您的 SMTP 帐户将保持被阻止。【参考方案7】:
如下更改 .env 文件
MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=587
MAIL_USERNAME=email_address@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
然后转到 gmail 安全部分 ->允许不太安全的应用访问
然后运行
php artisan config:clear
刷新网站
【讨论】:
Office365有类似的方法吗? Gmail 解决方案简单而优雅 - 但所有用于身份验证的 Office365 解决方案似乎都需要管理员权限或外部电子邮件提供商。【参考方案8】:如果您在发送电子邮件时仍然收到此错误:“无法使用 3 个可能的身份验证器在用户名“example@gmail.com”的 SMTP 服务器上进行身份验证”
您可以尝试以下方法之一:
转到https://accounts.google.com/UnlockCaptcha,点击继续并解锁您的帐户,以便通过其他媒体/网站访问。
密码使用双引号:like - "Abc@%$67eSDu"
【讨论】:
【参考方案9】:我也遇到了同样的错误-
-
确保在您的 gmail 帐户中启用安全性较低的应用访问
https://myaccount.google.com/security#connectedapps
在 .env 文件中为密码“password”加上双引号
这些解决方案对我有用。
【讨论】:
以上是关于使用 gmail 对 SMTP 服务器错误进行身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章
如何在Laravel SMTP中解决2个可能的身份验证器错误
使用 SendGrid/Gmail 时 SMTP 身份验证失败
如何解决 Laravel SMTP 中的 2 个可能的身份验证器错误