Google停用Less Secure Apps后如何用PHPMailer发Gmail邮件
PHPMailer对接Gmail发送失效的解决方案(低安全应用禁用后)
这个问题几乎所有用旧配置对接Gmail SMTP的开发者都遇到过——Google在2022年5月就已经全量下线了「Less Secure Apps(低安全应用访问)」权限,所有用账号明文密码直接走SMTP认证的旧逻辑都会被直接拦截,没有例外。
目前可行的调整方案有两种,按配置复杂度从低到高列:
方案一:使用应用专用密码(个人/单账号场景首选,配置最快)
这个方案的前提是你的Gmail账号已经开启了两步验证(2FA),没有开启两步验证的账号不会显示应用专用密码的入口。
配置步骤:
- 登录Google账号,进入安全设置页面,先完成两步验证的开启流程,按提示绑定验证器或者手机号即可
- 两步验证生效后,在安全设置页找到「应用专用密码」选项,选择应用类型为「邮件」,设备选你部署PHPMailer服务的对应设备,点击生成会得到一串16位的专属密码
- 调整PHPMailer的配置参数,核心配置参考如下:
$mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = '你的完整Gmail邮箱地址@gmail.com'; $mail->Password = '刚才生成的16位应用专用密码,不要带生成时显示的空格'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465; // 其余发件人、收件人、邮件内容配置和之前完全一致,不需要调整
- 写完先测试发1封,如果收到Google的安全提醒,点进去确认是本人操作即可,后续不会再重复拦截。
方案二:使用OAuth2.0鉴权(生产环境/多账号/企业Workspace账号场景推荐)
如果是企业级应用、需要对接多个Gmail账号,或者账号因为权限限制无法开启两步验证,可以用Google官方推荐的XOAUTH2认证方式,PHPMailer 6.0及以上版本原生支持该认证模式,不需要固定密码,通过API令牌完成鉴权,安全性更高。
配置要点:
- 去Google Cloud控制台创建项目,开启Gmail API权限
- 创建OAuth2.0凭据,拿到客户端ID、客户端密钥,给对应Gmail账号授权拿到刷新令牌
- PHPMailer配置时指定AuthType为
XOAUTH2,传入对应的凭据参数即可,不需要填写账号登录密码。
常见踩坑提醒
- 不用再在Google账号设置里翻「低安全应用访问」的开关了,该功能已经全量下线,任何教你开这个选项的教程都是过时无效的
- 如果部署在国内服务器,先本地测试
telnet smtp.gmail.com 465确认端口连通性,很多时候发送失败是网络拦截导致的,和配置无关 - 应用专用密码和账号登录密码独立,修改账号登录密码不会影响已生成的应用专用密码,不需要重复更新配置
- 如果是Google Workspace企业账号,需要先让管理员在控制台允许用户开启应用专用密码或者使用Gmail API,否则个人设置里找不到对应入口
内容的提问来源于stack exchange,提问作者Parth Patalia
相关产品推荐
相关产品推荐

