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

2023年Google Workspace账户Java邮件SMTP协议配置问题求助

解决Google Workspace SMTP配置认证失败问题

问题背景

我的Java邮件程序可正常通过Outlook365或Hotmail发送邮件,但配置Google Workspace账户SMTP协议时遇到三类问题:

  • SMTP中继方案:配置后触发javax.mail.AuthenticationFailedException认证失败错误
  • Gmail SMTP服务器方案:Google 2022年取消应用密码功能,无法使用
  • 受限Gmail SMTP服务器方案:仅支持发送组织内邮件,不符合需求

现寻求可成功配置的可行方案。

相关配置与错误日志

核心代码

Session session = Session.getInstance(prop, auth);

配置属性及错误日志

mail.smtp.starttls.enable=true
mail.smtp.port=587
mail.smtp.auth=true
mail.smtp.host=smtp-relay.gmail.com
mail.smtp.ssl.protocols=TLSv1.2
mail.smtp.ssl.trust=smtp-relay.gmail.com --> 此设置用于信任服务器证书

后续调试日志:
DEBUG SMTP: protocolConnect login, host=smtp-relay.gmail.com, user=myuser@my.domain, password=<non-null>
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 
DEBUG SMTP: Using mechanism LOGIN
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed

Caused by: javax.mail.AuthenticationFailedException: 535-5.7.8 用户名和密码不被接受

可行解决方案

方案1:修正SMTP中继配置(无需账号密码认证)

Google Workspace的smtp-relay.gmail.com服务不需要账号密码认证,而是通过IP白名单授权。你之前错误开启mail.smtp.auth=true,导致触发不必要的认证流程失败。

调整步骤:

  1. 修改配置属性:移除mail.smtp.auth=true或设置为false
  2. 在Google Workspace管理后台添加服务器IP到白名单:
    • 进入「应用」→「Google Workspace」→「Gmail」→「高级设置」
    • 找到「SMTP中继服务」,添加你的服务器公网IP,勾选「只接受来自已验证IP地址的邮件」

调整后的配置示例:

mail.smtp.starttls.enable=true
mail.smtp.port=587
mail.smtp.auth=false
mail.smtp.host=smtp-relay.gmail.com
mail.smtp.ssl.protocols=TLSv1.2
mail.smtp.ssl.trust=smtp-relay.gmail.com

方案2:使用OAuth2认证(无IP白名单场景)

如果无法配置IP白名单,OAuth2是Google当前推荐的认证方式:

  1. 在Google Cloud控制台创建OAuth2客户端:
    • 启用Gmail API
    • 创建「桌面应用」类型的客户端ID
  2. 获取账户的刷新令牌(通过OAuth2授权流程或工具生成)
  3. 配置JavaMail使用OAuth2:
    • 确保使用最新版com.sun.mail:javax.mail依赖(内置OAuth2支持)
    • 自定义认证器实现OAuth2逻辑,示例代码:
      import javax.mail.Authenticator;
      import javax.mail.PasswordAuthentication;
      
      public class OAuth2Authenticator extends Authenticator {
          private final String oauthToken;
      
          public OAuth2Authenticator(String oauthToken) {
              this.oauthToken = oauthToken;
          }
      
          @Override
          protected PasswordAuthentication getPasswordAuthentication() {
              return new PasswordAuthentication("", oauthToken);
          }
      }
      
      // 初始化Session
      Properties prop = new Properties();
      prop.put("mail.smtp.host", "smtp.gmail.com");
      prop.put("mail.smtp.port", "587");
      prop.put("mail.smtp.starttls.enable", "true");
      prop.put("mail.smtp.auth", "true");
      prop.put("mail.smtp.auth.mechanisms", "XOAUTH2");
      
      Session session = Session.getInstance(prop, new OAuth2Authenticator("你的刷新令牌"));
      

方案3:检查账户权限设置

  • 确认Google Workspace账户未被管理员限制外部邮件发送权限
  • 若开启两步验证,必须使用OAuth2认证,不能再用账号密码直接登录

内容的提问来源于stack exchange,提问作者Alesky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 13:45:24