使用Java Mail API发送邮件时遇认证失败异常求排查
解决Java Mail API发送邮件时的javax.mail.AuthenticationFailedException问题
这个错误提示很明确——Google邮箱的安全机制拦截了你的Java程序登录请求,咱们一步步来排查解决:
先处理账号端的安全验证
- 首先按照提示,用浏览器登录你的Google邮箱账号,看看有没有未处理的安全提示(比如Google提醒你有陌生设备尝试登录,需要你确认允许),完成所有验证步骤后再重试代码。
- 如果你的账号开启了两步验证,普通密码是无法用于第三方应用登录的,必须使用应用专用密码:
- 登录Google账号的安全设置页面
- 确认两步验证已经开启
- 找到「应用专用密码」选项,选择「邮件」作为应用类型,再选择对应的设备(或者选「其他」自定义名称)
- 生成一个16位的应用专用密码,把这个密码替换到你代码里的邮箱密码字段
- 如果还没开启两步验证,现在Google已经取消了「不太安全的应用访问」选项,所以你必须先开启两步验证,再生成应用专用密码才能正常使用Java Mail API发送邮件。
检查代码中的SMTP配置
确保你的代码里的SMTP参数设置正确,以下是标准的Google邮箱配置示例:
Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); // 初始化Session时使用应用专用密码 Session session = Session.getInstance(props, new javax.mail.Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-full-email@gmail.com", "your-app-specific-password"); } });
注意事项:
- 用户名必须是完整的邮箱地址(比如xxx@gmail.com)
- 密码必须是刚才生成的应用专用密码,而不是你平时登录邮箱的普通密码
- 端口用587(TLS加密)或者465(SSL加密),对应开启
starttls.enable或者ssl.enable参数
最后再测试
完成上面的设置后,重新运行你的按钮点击触发代码,应该就能正常发送邮件了。如果还是有问题,可以检查一下网络是否能访问Google的SMTP服务器,或者看看有没有防火墙拦截了请求。
内容的提问来源于stack exchange,提问作者pritam parab
相关产品推荐
相关产品推荐

