You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java Mail API发送邮件时遇认证失败异常求排查

解决Java Mail API发送邮件时的javax.mail.AuthenticationFailedException问题

这个错误提示很明确——Google邮箱的安全机制拦截了你的Java程序登录请求,咱们一步步来排查解决:

先处理账号端的安全验证

  • 首先按照提示,用浏览器登录你的Google邮箱账号,看看有没有未处理的安全提示(比如Google提醒你有陌生设备尝试登录,需要你确认允许),完成所有验证步骤后再重试代码。
  • 如果你的账号开启了两步验证,普通密码是无法用于第三方应用登录的,必须使用应用专用密码:
    1. 登录Google账号的安全设置页面
    2. 确认两步验证已经开启
    3. 找到「应用专用密码」选项,选择「邮件」作为应用类型,再选择对应的设备(或者选「其他」自定义名称)
    4. 生成一个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:40:23