Подтвердить что ты не робот

Разрешить ошибку 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)
4b9b3361

Ответ 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

Ответ 4

Большая часть AuthenticationFieldException Ошибка возникает при попытке входа в систему, сначала войдите в свой gmail и перейдите в https://www.google.com/settings/security/lesssecureapps и установите флажок. Я решил такую ​​проблему, как этот.

Ответ 5

По умолчанию учетная запись Gmail очень защищена. Когда мы используем gmail smtp из инструмента без gmail, электронная почта блокируется. Чтобы протестировать в нашей локальной среде, сделайте свою учетную запись gmail менее безопасной как

Ответ 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. Если вы не получите ответ, проверьте настройки брандмауэра. Это также может быть проблемой настройки прокси.