发送 SMTP 电子邮件时出现 AuthenticationFailedException 错误
AuthenticationFailedException error while sending SMTP email
我尝试在 java 中发送 SMTP 电子邮件,但我遇到了这样的错误,而且我没有收到邮件。
我关闭了所有的防火墙和杀毒软件。
错误:
javax.mail.AuthenticationFailedException: 534-5.7.14<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuIW
534-5.7.14 tAxHxbq4WR-vUuV1uOFAvx8NhInfxYTyNHi_8sJ80lX5lBdBla2ROiSKoysMNcFoQ6sGe
534-5.7.14 DUh173tDMolJ64W-Rahx1fhVF_08AvWrphibgQXiyyz5U1FNMMb-eGGJlUIbjyvBgQuZY6
534-5.7.14 tnykIXdVn__mg87aOmtxoss-EiFYeKdvuiBbt5eb9t_NOc97h-PkXOco-9FcYW69Iz9CTu
534-5.7.14 rfyhlo24k9oqIiWtcJwv85oUCO2g> 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/bin/answer.py?answer=78754 pd8sm1306363pdb.93 - gsmtp
这是我的代码:
private void btn_mailActionPerformed(java.awt.event.ActionEvent evt) {
String to = "receive.address@gmail.com";
String from = "send.address@gmail.com";
final String username = "send.address";
final String password = "sendpassword";
String host = "smtp.gmail.com";
Properties pro = new Properties();
pro.put("mail.smtp.host",host);
pro.put("mail.smtp.socketFactory.port","465");
pro.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
pro.put("mail.smtp.auth","true");
pro.put("mail.smtp.port","465");
Session session = Session.getInstance(pro,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username,password);
}
}
);
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("test mail");
message.setText("Hello how are you?");
Transport.send(message);
JOptionPane.showMessageDialog(null,"Send");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,e.toString());
System.out.println(e.toString());
}
从浏览器登录电子邮件并转到 this page。你会看到这个;
确保点击“打开”并重试您的代码。
我遇到了同样的问题。在对 Gmail 进行多次测试后,我发现问题在于 Gmail 需要 OAuth 登录,而不仅仅是密码。解决方案是使用 Gmail API. However, this is a very complicated solution that I won't go into too much detail about. If you are interested in this, read the first answer here。
但是,如果您想要一个简单的解决方案,我所做的只是切换到 Yahoo 帐户。因为 Yahoo 不使用相同的加密,所以它工作得很好。注意:不要忘记将 SMTP 服务器更改为 'smtp.mail.yahoo.com',并将端口更改为“25”。
如果您想从头开始设置,只需按照 this tutorial to download the JavaMail API and Java Activation Framework。
然后您只需复制并粘贴我的代码,更改最上面的变量,一切都会正常!如果我遗漏了什么,请告诉我!谢谢!
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Mailer {
public static void main(String[] args) {
final String username = "your-email@yahoo.com";
final String password = "your-password";
final String recipient = "email-recipient";
final String subject = "message-subject";
final String emailmessage = "message";
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.mail.yahoo.com");
props.put("mail.smtp.port", "25");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
message.setSubject(subject);
message.setText(emailmessage);
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}
我尝试在 java 中发送 SMTP 电子邮件,但我遇到了这样的错误,而且我没有收到邮件。 我关闭了所有的防火墙和杀毒软件。
错误:
javax.mail.AuthenticationFailedException: 534-5.7.14<https://accounts.google.com/ContinueSignIn?sarp=1&scc=1&plt=AKgnsbuIW
534-5.7.14 tAxHxbq4WR-vUuV1uOFAvx8NhInfxYTyNHi_8sJ80lX5lBdBla2ROiSKoysMNcFoQ6sGe
534-5.7.14 DUh173tDMolJ64W-Rahx1fhVF_08AvWrphibgQXiyyz5U1FNMMb-eGGJlUIbjyvBgQuZY6
534-5.7.14 tnykIXdVn__mg87aOmtxoss-EiFYeKdvuiBbt5eb9t_NOc97h-PkXOco-9FcYW69Iz9CTu
534-5.7.14 rfyhlo24k9oqIiWtcJwv85oUCO2g> 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/bin/answer.py?answer=78754 pd8sm1306363pdb.93 - gsmtp
这是我的代码:
private void btn_mailActionPerformed(java.awt.event.ActionEvent evt) {
String to = "receive.address@gmail.com";
String from = "send.address@gmail.com";
final String username = "send.address";
final String password = "sendpassword";
String host = "smtp.gmail.com";
Properties pro = new Properties();
pro.put("mail.smtp.host",host);
pro.put("mail.smtp.socketFactory.port","465");
pro.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
pro.put("mail.smtp.auth","true");
pro.put("mail.smtp.port","465");
Session session = Session.getInstance(pro,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username,password);
}
}
);
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("test mail");
message.setText("Hello how are you?");
Transport.send(message);
JOptionPane.showMessageDialog(null,"Send");
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,e.toString());
System.out.println(e.toString());
}
从浏览器登录电子邮件并转到 this page。你会看到这个;
确保点击“打开”并重试您的代码。
我遇到了同样的问题。在对 Gmail 进行多次测试后,我发现问题在于 Gmail 需要 OAuth 登录,而不仅仅是密码。解决方案是使用 Gmail API. However, this is a very complicated solution that I won't go into too much detail about. If you are interested in this, read the first answer here。
但是,如果您想要一个简单的解决方案,我所做的只是切换到 Yahoo 帐户。因为 Yahoo 不使用相同的加密,所以它工作得很好。注意:不要忘记将 SMTP 服务器更改为 'smtp.mail.yahoo.com',并将端口更改为“25”。
如果您想从头开始设置,只需按照 this tutorial to download the JavaMail API and Java Activation Framework。
然后您只需复制并粘贴我的代码,更改最上面的变量,一切都会正常!如果我遗漏了什么,请告诉我!谢谢!
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Mailer {
public static void main(String[] args) {
final String username = "your-email@yahoo.com";
final String password = "your-password";
final String recipient = "email-recipient";
final String subject = "message-subject";
final String emailmessage = "message";
Properties props = new Properties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.mail.yahoo.com");
props.put("mail.smtp.port", "25");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient));
message.setSubject(subject);
message.setText(emailmessage);
Transport.send(message);
System.out.println("Done");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
}
}