javax.mail.AuthenticationFailedException:Transport.send期间连接失败(消息)
javax.mail.AuthenticationFailedException: failed to connect during Transport.send(Message)
我通过 gmail 发送邮件的代码在 3 个月前运行良好。但是当我今天再次检查时,它失败并出现以下错误。
我的 Gmail 帐户未通过 2 因素验证。
代码:
package com.mail;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Mailer {
public static void sendMail(String messageSubject, String messageString)
{
Properties props = new Properties();
props.put("mail.smtp.host", ConstantsHolder.MAIL_HOST);
props.put("mail.smtp.user", ConstantsHolder.FROM_EMAIL);
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.fallback", "false");
//To use TLS
props.put("mail.smtp.starttls.enable", "true");
//get Session
Session session = Session.getDefaultInstance(props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(ConstantsHolder.FROM_EMAIL,ConstantsHolder.FROM_EMAIL_PASSWD);
}
});
//compose message
try {
MimeMessage message = new MimeMessage(session);
message.addRecipient(Message.RecipientType.TO,new InternetAddress(ConstantsHolder.TO_EMAIL));
message.setSubject(messageSubject);
message.setText(messageString);
//send message
Transport.send(message);
System.out.println("message sent successfully");
}
catch (MessagingException e)
{
System.out.println("Failed " + e.getMessage());
throw new RuntimeException(e);
}
}
}
错误是:
Failed failed to connect
Exception in thread "main" java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect
at com.mail.Mailer.sendMail(Mailer.java:57)
at com.mail.MailMain.main(MailMain.java:7)
Caused by: javax.mail.AuthenticationFailedException: failed to connect
at javax.mail.Service.connect(Service.java:322)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at com.mail.Mailer.sendMail(Mailer.java:51)
... 1 more
我是不是做错了什么?
我还检查了其他问题,但它与“连接失败:未提供密码”有关
=========================================== ==================
编辑:解决方案
按照@Nasten1988 的要求尝试打开调试模式后,我找到了问题的根本原因并能够继续。因此将@Nasten1988 的答案标记为正确答案。
阅读我对实际问题的回答。
=========================================== ==================
连接失败:可能你的连接被防火墙阻止了,你的软件是最新的吗?未提供密码:检查 Google 的要求,他们可能更改了它们并检查您的密码是如何为您的邮件方法提供的。也许调试器可以帮助你。这就是我想要的。
所以这对我有帮助 -
我将邮件会话的调试模式设置为 true -
session.setDebug(true);
显示了实际问题 -
我的 Gmail 帐户中关闭了不太安全的应用程序。
显然,如果一段时间不使用,它会自动关闭。
https://myaccount.google.com/lesssecureapps
您必须先关闭双因素身份验证,然后才能允许安全性较低的应用。
我通过 gmail 发送邮件的代码在 3 个月前运行良好。但是当我今天再次检查时,它失败并出现以下错误。 我的 Gmail 帐户未通过 2 因素验证。
代码:
package com.mail;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Mailer {
public static void sendMail(String messageSubject, String messageString)
{
Properties props = new Properties();
props.put("mail.smtp.host", ConstantsHolder.MAIL_HOST);
props.put("mail.smtp.user", ConstantsHolder.FROM_EMAIL);
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.debug", "true");
props.put("mail.smtp.socketFactory.fallback", "false");
//To use TLS
props.put("mail.smtp.starttls.enable", "true");
//get Session
Session session = Session.getDefaultInstance(props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(ConstantsHolder.FROM_EMAIL,ConstantsHolder.FROM_EMAIL_PASSWD);
}
});
//compose message
try {
MimeMessage message = new MimeMessage(session);
message.addRecipient(Message.RecipientType.TO,new InternetAddress(ConstantsHolder.TO_EMAIL));
message.setSubject(messageSubject);
message.setText(messageString);
//send message
Transport.send(message);
System.out.println("message sent successfully");
}
catch (MessagingException e)
{
System.out.println("Failed " + e.getMessage());
throw new RuntimeException(e);
}
}
}
错误是:
Failed failed to connect
Exception in thread "main" java.lang.RuntimeException: javax.mail.AuthenticationFailedException: failed to connect
at com.mail.Mailer.sendMail(Mailer.java:57)
at com.mail.MailMain.main(MailMain.java:7)
Caused by: javax.mail.AuthenticationFailedException: failed to connect
at javax.mail.Service.connect(Service.java:322)
at javax.mail.Service.connect(Service.java:172)
at javax.mail.Service.connect(Service.java:121)
at javax.mail.Transport.send0(Transport.java:190)
at javax.mail.Transport.send(Transport.java:120)
at com.mail.Mailer.sendMail(Mailer.java:51)
... 1 more
我是不是做错了什么? 我还检查了其他问题,但它与“连接失败:未提供密码”有关
=========================================== ================== 编辑:解决方案 按照@Nasten1988 的要求尝试打开调试模式后,我找到了问题的根本原因并能够继续。因此将@Nasten1988 的答案标记为正确答案。
阅读我对实际问题的回答。
=========================================== ==================
连接失败:可能你的连接被防火墙阻止了,你的软件是最新的吗?未提供密码:检查 Google 的要求,他们可能更改了它们并检查您的密码是如何为您的邮件方法提供的。也许调试器可以帮助你。这就是我想要的。
所以这对我有帮助 -
我将邮件会话的调试模式设置为 true -
session.setDebug(true);
显示了实际问题 - 我的 Gmail 帐户中关闭了不太安全的应用程序。 显然,如果一段时间不使用,它会自动关闭。
https://myaccount.google.com/lesssecureapps
您必须先关闭双因素身份验证,然后才能允许安全性较低的应用。