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

JavaMail跨服务器无法发邮件:SMTP认证失败(534-5.7.14)求助

解决Gmail SMTP在服务器上抛出javax.mail.AuthenticationFailedException: 534-5.7.14的问题

这个问题我帮不少开发者排查过,核心原因是Google的安全机制在陌生服务器环境下触发了额外拦截——哪怕你开了低安全性应用权限、服务器能连通587端口也没用。下面是几个必试的解决方案:

  • 检查两步验证状态,改用应用专用密码
    如果你的Gmail账号开了两步验证,那“低安全性应用访问”权限其实完全失效了,必须用应用专用密码替代普通密码。操作步骤很简单:

    1. 登录Google账号进入安全设置页面
    2. 找到“应用密码”选项(只有开启两步验证后才会显示)
    3. 选择“邮件”作为应用类型,“其他(自定义名称)”作为设备,点击生成
    4. 把生成的16位无空格密码替换到JavaMail配置的mail.smtp.password参数里
  • 手动批准服务器IP的登录请求
    Google会把服务器的IP标记为陌生登录来源,自动拦截。你需要:

    1. 登录Gmail账号,查看右上角的“最近登录活动”
    2. 找到来自服务器IP的那条记录,点击“这是我本人的登录”
    3. 回到服务器重新测试邮件发送,认证应该就能通过了
  • 解锁Google CAPTCHA验证
    服务器第一次发起请求时,大概率会触发CAPTCHA验证,你需要手动解锁:

    1. 登录你的Gmail账号后,进入解锁页面
    2. 点击“继续”按钮,允许后续10分钟内的陌生IP登录请求
    3. 立刻回到服务器测试发送,这个有效期只有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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:40:09