Разрешить ошибку javax.mail.AuthenticationFailedException
Я не знаком с этой функцией для отправки почты в java. Я получаю сообщение об ошибке при отправке письма на адрес reset. Надеюсь, вы можете дать мне решение.
Ниже мой код:
public synchronized static boolean sendMailAdvance(String emailTo, String subject, String body)
{
String host = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ADDRESS");
String userName = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-USERNAME");
String password = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PASSWORD");
String port = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PORT");
String starttls = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-STARTTLS");
String socketFactoryClass = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-SOCKET-CLASS");
String fallback = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ALLOW-FALLBACK");
try
{
java.util.Properties props = null;
props = System.getProperties();
props.put("mail.smtp.user", userName);
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.debug", "true");
if(!"".equals(port))
{
props.put("mail.smtp.port", port);
props.put("mail.smtp.socketFactory.port", port);
}
if(!"".equals(starttls))
props.put("mail.smtp.starttls.enable",starttls);
if(!"".equals(socketFactoryClass))
props.put("mail.smtp.socketFactory.class",socketFactoryClass);
if(!"".equals(fallback))
props.put("mail.smtp.socketFactory.fallback", fallback);
Session session = Session.getDefaultInstance(props, null);
session.setDebug(true);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(userName));
msg.setSubject(subject);
msg.setText(body, "ISO-8859-1");
msg.setSentDate(new Date());
msg.setHeader("content-Type", "text/html;charset=\"ISO-8859-1\"");
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(host, userName, password);
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();
return true;
}
catch (Exception mex)
{
mex.printStackTrace();
return false;
}
}
Выдает следующую ошибку:
DEBUG: setDebug: JavaMail version 1.4.1ea-SNAPSHOT
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL false 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465
EHLO fatin
250-mx.google.com at your service, [175.139.198.14]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN
250-ENHANCEDSTATUSCODES
250 CHUNKING
DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
YWNjb3VudEBibG9vbWluZy5jb20ubXk=
334 UGFzc3dvcmQ6
Ymxvb21pbmc=
535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257 m4sm5929870pbg.38 - gsmtp
[STDOUT] javax.mail.AuthenticationFailedException
[STDOUT] at javax.mail.Service.connect(Service.java:319)
[STDOUT] at javax.mail.Service.connect(Service.java:169)
[STDOUT] at com.vlee.util.mail.SendMail.sendMailAdvance(SendMail.java:283)
[STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd(DoMemberLogin.java:251)
[STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.doPost(DoMemberLogin.java:72)
Ответы
Ответ 1
Вы должны изменить порт на 587
, я проверил ваш код и отлично работал
Если ошибка все равно произойдет, измените переменную сеанса на код ниже:
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName, password);
}
});
Ответ 2
Возможно, эта проблема вызвана защитой учетной записи Gmail. Просто нажмите ссылку ниже и отключите параметры безопасности. Он будет работать.
https://www.google.com/settings/security/lesssecureapps
Ответ 3
Ответ 4
Большая часть AuthenticationFieldException Ошибка возникает при попытке входа в систему, сначала войдите в свой gmail и перейдите в https://www.google.com/settings/security/lesssecureapps и установите флажок. Я решил такую проблему, как этот.
Ответ 5
По умолчанию учетная запись Gmail очень защищена. Когда мы используем gmail smtp из инструмента без gmail, электронная почта блокируется. Чтобы протестировать в нашей локальной среде, сделайте свою учетную запись gmail менее безопасной как
Ответ 6
Измените это (установите менее безопасное приложение):
https://www.google.com/settings/security/lesssecureapps
Ответ 7
Я получаю ту же самую ошибку в течение длительного времени.
Когда я изменил сеанс debug на true
Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx"));
session.setDebug(true);
Я получил справочную ссылку https://support.google.com/mail/answer/78754 с консоли вместе с javax.mail.AuthenticationFailedException.
На шагах по ссылке я выполнил следующие шаги. Когда я сменил свой пароль с помощью сочетания букв, цифр и символов, чтобы быть моим сюрпризом, письмо было создано без исключения проверки подлинности.
Примечание. Мой старый пароль был более безопасным.
Ответ 8
2 возможных причины:
- Для вашего имени пользователя может потребоваться весь адрес электронной почты '[email protected]'
- Самое очевидное: пароль неправильный. Отладка, чтобы проверить, правильно ли используется пароль.
Ответ 9
Если вы входите в свою учетную запись gmail из нового приложения или устройства, Google может блокировать это устройство. Выполните следующие шаги:
Чтобы защитить свою учетную запись, Google может затруднить вход в вашу учетную запись, если мы подозреваем, что это не вы. Например, Google может запрашивать дополнительную информацию, кроме вашего имени пользователя и пароля, если вы путешествуете, или если вы пытаетесь войти в свою учетную запись с нового устройства.
Перейдите в https://g.co/allowaccess с другого устройства, которое вы ранее использовали для доступа к своей учетной записи Google, и следуйте инструкциям.
Повторите попытку входа из заблокированного приложения.
Ответ 10
trying to connect to host "smtp.gmail.com", port 465, isSSL false
У вас неправильный параметр gmail smtp. Gmail требует SSL. См. Руководства по отправке электронной почты через Java через SMTP Gmail, например: http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/
Ответ 11
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendMail1 {
public static void main(String[] args) {
// Recipient email ID needs to be mentioned.
String to = "valid email to address";
// Sender email ID needs to be mentioned
String from = "valid email from address";
// Get system properties
Properties properties = System.getProperties();
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");
Authenticator authenticator = new Authenticator () {
public PasswordAuthentication getPasswordAuthentication(){
return new PasswordAuthentication("userid","password");//userid and password for "from" email address
}
};
Session session = Session.getDefaultInstance( properties , authenticator);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Ответ 12
На всякий случай кто-то найдет решение этой проблемы.
Проблемы с аутентификацией можно устранить, активировав двухэтапную аутентификацию Google для используемой учетной записи и создав специальный пароль для приложения. У меня была та же проблема, что и у ОП. Включение двухступенчатой работы.
Ответ 13
У меня была эта проблема, но решение не имело никакого отношения к кодированию. Убедитесь, что вы можете подключиться к gmail. Ping smtp.gmail.com. Если вы не получите ответ, проверьте настройки брандмауэра. Это также может быть проблемой настройки прокси.