SMTP Google Apps Oauth2-中继中出现问题
我试图通过使用oAuth2机制连接到Google SMTP服务器来发送邮件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.
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
编辑:
我已更改了我正在尝试连接的谷歌应用程序帐户的以下内容,并清除了上述异常:
- 允许的发件人:任何地址(不推荐)
- 仅接受来自指定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身份验证一起工作?