谷歌停用“低安全应用”后Gmail SMTP发信失败的可行解决方法
问题说明
5月31日谷歌正式下线「Less secure apps(低安全应用)」访问权限选项后,基于Java Mail API调用Gmail SMTP服务的发信功能会直接触发认证失败,原有明文账号密码的登录方式完全失效,典型报错信息如下:
javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at 535 5.7.8 https://support.google.com/mail/?p=BadCredentials n13-20020a5d400d000000b0020ff7246934sm4970874wrp.95 - gsmtp
谷歌官方已明确该低安全应用访问权限永久下线,不存在重新开启的入口,可通过以下三种方案继续使用Gmail账号完成SMTP发信。
可行变通方案
- 方案1:使用应用专用密码(App Password),接入成本最低
该方案仅需替换原有配置中的密码字段,不需要修改代码逻辑。使用前提是对应Gmail账号已开启两步验证(2FA):- 进入谷歌账号安全设置页,在「登录Google」板块找到「应用专用密码」入口
- 选择应用类型为「邮件」,设备选择当前运行Java发信服务的对应设备,生成16位长度的专用密码
- 将Java Mail配置中原有的Gmail账号登录密码替换为这串16位专用密码即可,原有SMTP服务地址(smtp.gmail.com)、端口(465走SSL、587走TLS)、加密配置全部不需要改动
注意:如果使用的是谷歌Workspace企业账号,需要先由管理员在控制台放开权限,允许用户生成应用专用密码;个人普通账号开启两步验证后可直接操作。
- 方案2:切换OAuth 2.0授权认证,官方长期推荐方案
该方案完全放弃固定账密认证逻辑,通过OAuth 2.0授权流程获取Gmail账号的发信权限令牌,Java Mail初始化会话时传入有效令牌即可完成SMTP认证。该方案不需要账号开启两步验证,个人账号、Workspace账号均适用,缺点是接入流程相对复杂:需要先在Google Cloud控制台创建项目、开启Gmail API、配置OAuth同意屏幕,拿到客户端ID与密钥后完成授权流程获取访问令牌,再对接入代码做对应调整。 - 方案3:SMTP中继服务,仅面向谷歌Workspace企业账号
企业域名绑定的Workspace账号可由管理员在后台配置SMTP中继规则,通过配置出口IP白名单、域名SPF记录校验的方式跳过账号密码认证环节,直接调用SMTP接口发信,适合出口IP固定的服务端生产场景使用。
配置避坑提示
- 不要尝试使用25端口非加密连接Gmail SMTP服务,谷歌已完全封禁非加密的SMTP接入请求
- 填写应用专用密码时不需要保留生成时显示的分隔空格,直接传入16位连续字符串即可
- 如果配置应用专用密码后仍报认证错误,可先通过网页端登录对应Gmail账号,完成可能触发的异地登录安全校验后再重试
内容的提问来源于stack exchange,提问作者Soske
相关产品推荐
相关产品推荐

