我正在尝试使用Java将邮件发送到Gmail帐户,代码如下。我似乎正在正确地做所有事情,但是我收到了身份验证失败。谷歌希望我打开“不太安全的应用程序”#34;功能,以启用传输。
有没有办法以这样的方式编写代码,使Gmail对Java感到满意,并且不会使用#34;打开不太安全的应用程序"故障?
错误:
javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=...U
534-5.7.14 FigguJaZwDtp...
534-5.7.14 ...o> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14 Learn more at
534 5.7.14 https://support.google.com/mail/answer/... - gsmtp
代码:
String hostSmtpUser = "myemail@gmail.com";
String host = "smtp.gmail.com";
String hostPort = "587";
String hostSmtpPassword = "thepassword";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.user", hostSmtpUser);
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.port", hostPort);
properties.setProperty("mail.smtp.auth", "true");
Session oSession;
if (true == ToolsCommon.isEmpty(hostSmtpUser))
oSession = Session.getInstance(properties);
else
oSession = Session.getInstance(properties, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(hostSmtpUser, hostSmtpPassword);
}
});
// Compose the message
try
{
MimeMessage message = new MimeMessage(oSession);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(Subject);
message.setText(Body);
// Send message
Transport.send(message);
}
catch (MessagingException ex)
{
// Log the error.
ToolsLog.logError(TypeLog.ui, ex);
}
我已经做过研究,所以我所知道的代码不是问题,只是没有看到安全性较低的应用消息的解决方法。
参考文献:
答案 0 :(得分:1)
默认情况下,GMail不允许基于密码的身份验证 - 这就是为什么您必须允许&#34;安全性较低的应用程序&#34;按原样使用你的程序。
相反,您可以use OAuth 2.0避免直接使用密码。该方法被Google视为安全,并且不需要更改任何帐户设置。