Java应用配置Gmail SMTP发邮件报535认证失败异常求助
问题根因定位
535-5.7.8 Username and Password not accepted是Gmail SMTP服务的认证失败报错,即便你确认账号密码正确、手动开启过低安全性应用访问,90%以上的情况是Google旧安全规则失效、配置缺项或者网络拦截导致,按以下顺序排查修复:
修复步骤
放弃使用「低安全性应用访问」方案
Google在2022年5月就已经全面下线了普通Gmail账号的低安全性应用访问权限,目前老页面留存的开关对2022年后新注册账号、开启了两步验证的账号完全不生效,不管开关状态如何,直接用账号登录密码走SMTP认证都会被拦截。改用应用专用密码做SMTP认证
这是目前Gmail官方唯一支持的第三方客户端SMTP认证方式:- 登录对应Gmail账号,进入安全设置页,先完成「两步验证」的开启(需绑定可用手机号完成身份校验)
- 两步验证开启后,安全页会自动显示「应用专用密码」入口,进入后应用类型选择「邮件」,设备选择你运行Java程序的对应设备,点击生成即可得到16位随机密码
- 将配置文件中
password字段的值替换为这串16位密码,不要使用原账号的登录密码。
补全JavaMail配置的缺失参数
你当前的配置缺少鉴权、SSL信任相关的必填参数,补全后参考如下:mail: host: smtp.gmail.com username: 你的完整Gmail邮箱地址 password: 生成的16位应用专用密码 port: 465 protocol: smtps properties: mail.smtps.auth: true mail.smtps.starttls.enable: true mail.smtps.ssl.trust: smtp.gmail.com mail.smtps.connectiontimeout: 5000 mail.smtps.timeout: 5000环境连通性与风控排查
如果以上配置改完仍报错,逐一排查以下问题:- 测试网络连通性:在运行Java程序的机器上执行
telnet smtp.gmail.com 465,如果端口不通,说明是本地防火墙、运营商网络拦截了SMTP请求,需要换通网的环境或者放行对应端口 - 企业账号额外检查:如果使用的是Google Workspace企业邮箱,需要找域管理员在后台开启「允许用户生成应用专用密码」的权限,个人普通账号无此限制
- 风控解锁:如果短时间内多次输错密码、或者登录IP跨区域跳转过快,Google会临时拦截SMTP登录请求,此时进入账号的安全活动记录页,找到被拦截的登录记录手动标记为本人操作,等待10分钟左右重试即可
- 测试网络连通性:在运行Java程序的机器上执行
注意:Gmail已经全面禁止非加密的SMTP连接,不要尝试使用25端口非加密、或者587端口未开TLS的配置,这类请求会被直接拒绝,和账号密码正确性无关。
内容的提问来源于stack exchange,提问作者Peter Shneider
相关产品推荐
相关产品推荐

