Spring MailSender对接Gmail SMTP突发用户名密码认证失败问题
故障根因
你看到的Google 2022年5月30日生效的安全策略调整,就是这次认证失败的直接原因。
这次策略更新直接永久下线了“允许低安全性应用访问”功能:不管你之前有没有开过这个选项,现在Google会全面拦截所有仅靠用户名+普通密码、走LOGIN/PLAIN这类传统认证流程的第三方应用请求,和你配置的账号密码本身对不对没有任何关系。
日志关键佐证
从你贴的SMTP调试日志能直接坐实问题:
- 客户端和smtp.gmail.com握手时,已经识别到服务端支持
XOAUTH2这类合规认证方式,但你当前的Spring Mail配置没开OAuth2逻辑,根本走不了这个流程 - 客户端默认选了
LOGIN传统明文密码认证发起请求,正好撞在Google的拦截规则上 - 最后抛的
535-5.7.8 Username and Password not accepted是Google拦截非合规请求返回的统一报错,不是真的你密码输错了。
可行解决方案
根据你的使用场景选一个就行:
- 方案1:应用专用密码(修复最快,适合测试/非核心场景临时救急)
先给这个Gmail账号开启两步验证,开完之后在账号安全设置里找到「应用专用密码」入口,生成一个16位的专用密码,把Spring配置里原来填的邮箱登录密码换成这个16位密码就行,其他配置不用动,原来的发信逻辑直接就能恢复。注意这个方式不推荐生产环境长期用,Google后续大概率会逐步收紧这个功能的使用范围。 - 方案2:OAuth2认证(官方推荐,生产环境首选,长期稳定)
这是目前Google唯一官方支持的第三方接入方式:- 登录Google Cloud控制台创建对应项目,开通Gmail API权限
- 创建OAuth2认证凭据,给你的发件邮箱走完授权流程,拿到访问令牌
- 调整Spring MailSender的配置,把认证机制改成
XOAUTH2,替换掉原来明文密码的认证逻辑,配完就能长期稳定用。
提醒:别再折腾“低安全性应用访问”开关了,这个功能已经全量下线,再怎么调这个开关都解决不了问题,纯浪费时间。
内容的提问来源于stack exchange,提问作者Ayoub Elmo
相关产品推荐
相关产品推荐

