2022年6月Gmail停用低安全应用选项后Laravel发信失败如何解决
Laravel适配Gmail SMTP发信配置方案
Gmail在2022年6月下线「低安全应用访问」权限后,直接使用Gmail账号登录密码做SMTP认证的方式已经被官方拦截,现有配置失效就是这个原因,按以下步骤调整即可,不需要改动业务代码:
前置操作:配置Google账号
- 登录发信使用的Gmail对应Google账号,进入安全设置页,开启两步验证,未开启两步验证的账号无法生成应用专用密码
- 两步验证生效后,在安全设置页找到「应用专用密码」入口,选择应用类型为「其他/自定义」,填入备注名(比如
Laravel站点发信)后点击生成 - 保存弹窗里显示的16位应用专用密码,这个密码关闭弹窗后无法二次查看,需要提前复制好
修改Laravel配置
打开项目根目录的.env文件,把原来被注释的邮件配置项全部取消注释,将原配置里的登录密码替换为刚才生成的16位应用专用密码,参考配置如下:
MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=465 MAIL_USERNAME=test@gmail.com MAIL_PASSWORD=你生成的16位应用专用密码(不要带前后空格) MAIL_ENCRYPTION=ssl MAIL_FROM_ADDRESS=test@gmail.com MAIL_FROM_NAME="你的站点发信名称"
生效配置
在项目根目录执行以下命令清理Laravel缓存,让新配置生效:
php artisan config:clear php artisan cache:clear
排错提示:如果配置完成后还是无法发信,先检查部署Laravel的服务器是否能正常连通
smtp.gmail.com的465端口,部分机房默认封禁海外SMTP端口,需要先放通防火墙规则。
如果对发信送达率要求更高,也可以选择接入Gmail API发信,不过需要在Google Cloud控制台创建凭证、安装对应Composer依赖,配置流程比应用专用密码方案复杂,普通业务场景用上述应用专用密码的方案完全可以满足需求。
内容的提问来源于stack exchange,提问作者Adnan Zaheer
相关产品推荐
相关产品推荐

