PHPMailer对接Gmail突发SMTP Could not authenticate认证错误
问题根因
Gmail从2024年起对所有存量账号全量下线了「低安全性应用访问」支持,之前未做迁移、一直用账号原始密码连接SMTP服务的脚本,会在账号被规则覆盖后直接触发认证失败报错,和你是否修改密码、改动代码没有关系。
排查流程
按顺序检查以下项即可定位问题:
- 先使用代码中配置的邮箱账号、密码直接登录Gmail网页端,确认账号无异常风控锁定、无强制身份验证要求,排除账号本身被封禁、被盗的情况。如果登录时看到「来自陌生IP的登录尝试已被拦截」的安全提醒,直接标记为本人操作即可临时解除IP拦截。
- 进入Gmail账号的安全设置页,检查「低安全性应用访问」开关状态:目前该开关已经对99%以上的普通Gmail账号永久移除,找不到该选项就说明账号已经被新规则覆盖,无法再使用原始账号密码通过SMTP认证。
- 检查账号是否开启了两步验证(2FA):只要开启了2FA,原始账号密码默认就不具备SMTP登录权限,必须使用专用密码。
- 排查服务器网络连通性:在部署代码的服务器上执行
telnet smtp.gmail.com 587确认能正常连通,排除服务器防火墙、运营商封587端口导致的连接异常(这类异常一般会报连接超时,和你现在的认证失败报错有区别,可以优先排除)。
修复方案
- 长期稳定可用的方案:先给Gmail账号开启两步验证,之后在安全设置页找到「应用专用密码」生成入口,选择应用类型为「邮件」,生成16位长度的专用密码,将代码中
$mail->Password对应的字段值替换为该专用密码即可,其余SMTP服务器地址、端口、加密方式配置完全不需要改动,替换后即可正常发信。
注意:生成的应用专用密码不需要保留空格,直接复制填入代码配置项即可,每个应用专用密码只对应一个应用场景,不要多个业务系统混用。
- 备选方案:如果不想开启两步验证,可以改用Gmail OAuth2 API的方式对接发信,但是配置流程复杂,需要申请API凭证,普通业务场景不推荐使用。
另外你的代码里存在一个HTML语法小问题,不会触发认证报错,但会导致邮件显示异常:$mail->Body字段中的<span>标签错误闭合为了</code>,建议顺手修正为</span>。
内容的提问来源于stack exchange,提问作者vsdsfdf
相关产品推荐
相关产品推荐

