SMTP Google Apps Oauth2-中继中出现问题

SMTP Google Apps Oauth2-中继中出现问题,smtp,google-apps,oauth2,smtp-auth,emailrelay,Smtp,Google Apps,Oauth2,Smtp Auth,Emailrelay,我试图通过使用oAuth2机制连接到Google SMTP服务器来发送邮件 public static Transport connectToSmtp(String smtpServer, int port, String email, String authToken, boolean isDebug, MimeMessage mimeMsg) throws Exception { Properties props = new Properties(); props.

我试图通过使用oAuth2机制连接到Google SMTP服务器来发送邮件

public static Transport connectToSmtp(String smtpServer, int port, String email, String authToken, boolean isDebug, MimeMessage mimeMsg)
     throws Exception
{
    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.starttls.required", "true");
    props.put("mail.smtp.sasl.enable", "true");
    props.put("mail.smtp.sasl.mechanisms", "XOAUTH2");
    props.put("mail.imaps.sasl.mechanisms.oauth2.oauthToken", authToken);
    Session session = Session.getInstance(props);
    session.setDebug(isDebug);
    final String emptyPassword = "";
    Transport transport = session.getTransport("smtp");
    transport.connect(smtpServer, port, email, emptyPassword);
    try
    {
        transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());
    }
    catch (Exception e)
    {
        logger.log(Level.WARNING, "Exception Occured : ", e);
    }
    return transport;
}
我的应用程序的客户端ID和密码:

ID-345101*-i6ki*4tk1sms.apps.googleusercontent.com

秘密-e6NHB*-eZ rk

上述代码引发了以下错误:

javax.mail.AuthenticationFailedException:535-5.7.8不接受用户名和密码。了解更多信息,请访问 535.7.8 O135SM276925第4条-gsmtp

Smtp服务器:aspmx.l.google.com, 港口:25

编辑:

我已更改了我正在尝试连接的谷歌应用程序帐户的以下内容,并清除了上述异常:

  • 第2步身份验证

  • 允许不太安全的应用程序 “安全”->“基本设置”->“转到不太安全的应用程序的设置”->“允许用户管理对不太安全的应用程序的访问”

  • 但在清除了上述异常之后。我还有一个例外

    com.sun.mail.smtp.SMTPSendFailedException:550-5.7.1中继[121…2]的凭据无效。您在Google Apps SMTP中继服务中注册的IP地址与发送此电子邮件的帐户的域不匹配。如果您试图中继来自未在您的Google Apps帐户下注册或具有空信封的域的邮件,则必须将邮件服务器配置为使用SMTP AUTH标识发送域,或在HELO或EHLO命令中显示您的域名之一。有关更多信息,请访问f65sm341248ith.1-gsmtp ;

    因此,我更改了以下设置:

    应用程序>谷歌应用程序>Gmail>Gmail设置>高级设置

    SMTP中继服务

    • 允许的发件人:任何地址(不推荐)
    • 仅接受来自指定IP地址的邮件:否
    • 需要SMTP身份验证:是
    • 需要TLS加密:否
    即使在尝试上述更改之后,也会引发相同的异常。
    请提供帮助。

    普通身份验证和OAuth2必须在向SMTP服务器发送实际邮件数据的传输对象中进行区分。 这在JavaMail中完成,密码参数位于Transport.connect()

    如果在上述代码中密码为null,则Java MailClient将身份验证视为OAuth而不是普通身份验证

    所以代码应该是

    final String emptyPassword = null;
    
    作为对评论的回复,
    如果身份验证作为IP地址提供,则不会验证给定的用户名和密码。相反,连接来源的IP地址用作身份验证。

    当您将发件人IP地址添加到GApps中继邮件设置并选择“身份验证类型”作为IP地址时,这就是相同代码起作用的原因。

    我尚未注册用于身份验证的IP地址。而是将身份验证作为SMTP配置提供。后来,我添加了另一个SMTP中继设置,将身份验证作为IP地址,并给出了121.*.2。成功了。我的问题是为什么它不能与SMTP身份验证一起工作?