JavaMail跨服务器无法发邮件:SMTP认证失败(534-5.7.14)求助
解决Gmail SMTP在服务器上抛出javax.mail.AuthenticationFailedException: 534-5.7.14的问题
这个问题我帮不少开发者排查过,核心原因是Google的安全机制在陌生服务器环境下触发了额外拦截——哪怕你开了低安全性应用权限、服务器能连通587端口也没用。下面是几个必试的解决方案:
检查两步验证状态,改用应用专用密码
如果你的Gmail账号开了两步验证,那“低安全性应用访问”权限其实完全失效了,必须用应用专用密码替代普通密码。操作步骤很简单:- 登录Google账号进入安全设置页面
- 找到“应用密码”选项(只有开启两步验证后才会显示)
- 选择“邮件”作为应用类型,“其他(自定义名称)”作为设备,点击生成
- 把生成的16位无空格密码替换到JavaMail配置的
mail.smtp.password参数里
手动批准服务器IP的登录请求
Google会把服务器的IP标记为陌生登录来源,自动拦截。你需要:- 登录Gmail账号,查看右上角的“最近登录活动”
- 找到来自服务器IP的那条记录,点击“这是我本人的登录”
- 回到服务器重新测试邮件发送,认证应该就能通过了
解锁Google CAPTCHA验证
服务器第一次发起请求时,大概率会触发CAPTCHA验证,你需要手动解锁:- 登录你的Gmail账号后,进入解锁页面
- 点击“继续”按钮,允许后续10分钟内的陌生IP登录请求
- 立刻回到服务器测试发送,这个有效期只有10分钟,别磨蹭
核对JavaMail配置的正确性
确保你的SMTP配置没遗漏关键参数,正确的配置示例如下: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.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-gmail@gmail.com", "your-app-password-or-valid-password"); } });注意:用普通密码时要避免特殊字符转义问题;用应用密码的话,要完整复制16位字符,别加空格或换行。
优先从两步验证和应用密码的方向排查,这是最容易被忽略的点,大部分情况下都能解决问题。
内容的提问来源于stack exchange,提问作者FLATeric
相关产品推荐
相关产品推荐

