生产环境Laravel 9使用Gmail发邮件SMTP认证报错解决
问题原因判定
你遇到的SMTP认证失败报错,确实是Gmail 2022年5月22日下线「允许低安全性应用访问」功能导致的。
错误返回码534附带的提示已经明确说明问题:当前你在.env中配置的是Gmail账号的普通登录密码,Gmail已经禁止第三方客户端直接使用账号密码通过LOGIN/PLAIN方式做SMTP认证;XOAUTH2认证报错是因为你没有配置对应的OAuth授权参数,认证流程走不通。
你当前的邮件配置里,MAIL_HOST、端口、加密方式的参数都是正确的,不需要调整。
可行解决方法
方案1:使用应用专用密码(生产环境最快修复方案)
这个方案不需要改代码,5分钟即可完成配置:
- 先登录对应Gmail账号,在账号安全设置中开启两步验证(2FA):只有开启两步验证的Gmail账号才支持生成应用专用密码,未开启2FA的账号找不到这个配置入口。
- 开启2FA后,在同一安全设置页找到「应用专用密码」选项,应用类型选择「邮件」,设备项可自定义填写为你的业务标识(比如「生产环境Laravel应用」),点击生成后会得到一个16位的无空格密码。
- 打开项目
.env文件,把MAIL_PASSWORD的值替换为刚才生成的16位应用专用密码,其余邮件配置项保持不变。 - 登录服务器进入项目根目录,执行配置缓存清理命令让新配置生效:
php artisan config:cache
执行完直接测试发件即可,不需要调整其他代码。
方案2:配置XOAUTH2认证(长期合规方案)
如果你的安全规范不允许使用应用专用密码,可以走Google官方OAuth2.0认证流程:
- 登录Google云控制台新建项目,开启Gmail API服务,创建OAuth2.0客户端凭证,获取客户端ID、客户端密钥。
- 给用于发件的Gmail账号授予Gmail API发件权限,获取对应的刷新令牌(refresh_token)。
- 在Laravel项目中安装兼容的Gmail OAuth驱动包:
composer require symfony/google-mailer
- 修改
.env邮件配置,将认证方式切换为XOAUTH2,填入之前获取的客户端ID、客户端密钥、刷新令牌参数。 - 同样执行
php artisan config:cache清理配置缓存后测试发件。
注意:目前所有普通Gmail账号的「低安全性应用访问」入口已经永久下线,不存在绕过入口,网上流传的更换SMTP地址、换端口的方法都无法解决534认证报错。
内容的提问来源于stack exchange,提问作者Sr. Miyagui
相关产品推荐
相关产品推荐

