webentwicklung-frage-antwort-db.com.de

Beheben Sie den Fehler javax.mail.AuthenticationFailedException

Ich bin mit dieser Funktion zum Versenden von E-Mails in Java nicht vertraut. Beim Senden einer E-Mail zum Zurücksetzen eines Kennworts wird eine Fehlermeldung angezeigt. Hoffe du kannst mir eine Lösung geben.

Unten ist mein Code:

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;
    }
}

Löst folgenden Fehler aus:

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: Versuch, eine Verbindung zu Host "smtp.gmail.com", Port 465, isSSL false herzustellen 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp

DEBUG SMTP: Verbunden mit Host "smtp.gmail.com", Port: 465

EHLO fatin

250-mx.google.com zu Ihren Diensten, [175.139.198.14]

250-SIZE 35882577

250-8BITMIME

250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN

250-ENHANCEDSTATUSCODES

250 CHUNKING

DEBUG SMTP: Gefundene Erweiterung "SIZE", arg "35882577"

DEBUG SMTP: Gefundene Erweiterung "8BITMIME", arg ""

DEBUG SMTP: Gefundene Erweiterung "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"

DEBUG SMTP: Erweiterung "ENHANCEDSTATUSCODES", arg "" gefunden

DEBUG SMTP: Gefundene Erweiterung "CHUNKING", arg ""

DEBUG SMTP: Versuch, sich zu authentifizieren

AUTH LOGIN

334 VXNlcm5hbWU6

YWNjb3VudEBibG9vbWluZy5jb20ubXk =

334 UGFzc3dvcmQ6

Ymxvb21pbmc = 535-5.7.8 Benutzername und Passwort werden nicht akzeptiert. Weitere Informationen erhalten Sie unter 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257

m4sm5929870pbg.38 - gsmtp

[STDOUT] javax.mail.AuthenticationFailedException

[STDOUT] unter javax.mail.Service.connect (Service.Java:319)

[STDOUT] unter javax.mail.Service.connect (Service.Java:169)

[STDOUT] unter com.vlee.util.mail.SendMail.sendMailAdvance (SendMail.Java:283)

[STDOUT] unter com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd (DoMemberLogin.Java:251)

[STDOUT] unter com.vlee.servlet.ecommerce.DoMemberLogin.doPost (DoMemberLogin.Java:72)

32
Fatin Az

Sie sollten den Port auf 587 Ändern. Ich habe Ihren Code getestet und er funktioniert einwandfrei

Wenn der Fehler weiterhin auftritt, ändern Sie die Sitzungsvariable in den folgenden Code:

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
14
Ha Nguyen

Möglicherweise liegt dieses Problem am Schutz des Google Mail-Kontos. Klicken Sie einfach auf den folgenden Link und deaktivieren Sie die Sicherheitseinstellungen. https://www.google.com/settings/security/lesssecureapps

76
Raj008
20
Anil Amane

Standardmäßig ist das Google Mail-Konto hochsicher. Wenn wir Google Mail SMTP aus einem anderen Tool als Google Mail verwenden, werden E-Mails blockiert. Machen Sie Ihr Google Mail-Konto zum Testen in unserer lokalen Umgebung weniger sicher als

  1. Melden Sie sich bei Google Mail an.
  2. Greifen Sie auf die URL zu unter https://www.google.com/settings/security/lesssecureapps
  3. Wählen Sie "Einschalten"
10
amitkumar

Die meisten AuthenticationFieldException-Fehler treten auf, wenn Anmeldeversuche verhindert wurden. Melden Sie sich zuerst bei Google Mail an und rufen Sie https://www.google.com/settings/security/lesssecureapps auf und aktivieren Sie das Kontrollkästchen. Ich habe so ein Problem gelöst.

8
sawpyae

Ändern Sie dies (weniger sichere App festlegen): https://www.google.com/settings/security/lesssecureapps

4
Do Nhu Vy

Wenn Sie sich mit einer neuen Anwendung oder einem neuen Gerät bei Ihrem Google Mail-Konto anmelden, blockiert Google dieses Gerät möglicherweise. Versuchen Sie, die folgenden Schritte auszuführen:

Zum Schutz Ihres Kontos kann die Anmeldung in Ihrem Konto durch Google möglicherweise erschwert werden, wenn wir den Verdacht haben, dass Sie es nicht sind. Beispielsweise fordert Google möglicherweise neben Ihrem Nutzernamen und Passwort weitere Informationen an, wenn Sie auf Reisen sind oder wenn Sie versuchen, sich von einem neuen Gerät aus in Ihrem Konto anzumelden.

Rufen Sie https://g.co/allowaccess von einem anderen Gerät aus auf, mit dem Sie zuvor auf Ihr Google-Konto zugegriffen haben, und befolgen Sie die Anweisungen. Versuchen Sie erneut, sich über die blockierte App anzumelden.

4
Mate Šimović

Ich habe den gleichen Fehler für lange Zeit bekommen.

Als ich das Session-Debug auf true geändert habe

Session session = Session.getDefaultInstance(props, new GMailAuthenticator("[email protected]", "xxxxx"));
session.setDebug(true);

Ich habe die Hilfe-URL https://support.google.com/mail/answer/78754 von der Konsole zusammen mit javax.mail.AuthenticationFailedException erhalten.

Von den Schritten in der Verbindung folgte ich jedem Schritt. Als ich zu meiner Überraschung mein Passwort mit einer Mischung aus Buchstaben, Zahlen und Symbolen änderte, wurde die E-Mail ohne Authentifizierungsausnahme generiert.

Hinweis: Mein altes Passwort war weniger sicher.

2
Vino

2 mögliche Gründe:

  • Für Ihren Benutzernamen ist möglicherweise die gesamte E-Mail-ID "[email protected]" erforderlich.
  • Am offensichtlichsten: Das Passwort ist falsch. Testen Sie, ob das verwendete Kennwort korrekt ist.
1
Kedar

Die Lösung, die für mich funktioniert, besteht aus zwei Schritten.

  1. Erster Schritt

    package com.student.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;
    
    /**
     *
     * @author jorge santos
     */
    public class GoogleMail {
        public static void main(String[] args) {
            Properties props = new Properties();
            props.put("mail.smtp.Host", "smtp.gmail.com");
            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"); 
            Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("[email protected]","Silueta95#");
                }
            });
    
        try {
    
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("[email protected]"));
            message.setRecipients(Message.RecipientType.TO,
                    InternetAddress.parse("[email protected]"));
            message.setSubject("Testing Subject");
            message.setText("Test Mail");
    
            Transport.send(message);
    
            System.out.println("Done");
    
        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
    }
    
    }
    
  2. Aktivieren Sie die Google Mail-Sicherheit

    https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none
    
1

Nur für den Fall, dass jemand nach einer Lösung für dieses Problem sucht.

Die Authentifizierungsprobleme können durch Aktivieren der zweistufigen Google-Überprüfung für das verwendete Konto und Erstellen eines app-spezifischen Passworts behoben werden. Ich hatte das gleiche Problem wie das OP. Aktivierung in 2 Schritten funktioniert.

0
Anil Muppalla

Ich hatte auch dieses Problem, aber die Lösung hatte nichts mit Codierung zu tun. Stellen Sie sicher, dass Sie eine Verbindung zu Google Mail herstellen können. Pingen Sie smtp.gmail.com. Wenn Sie keine Antwort erhalten, überprüfen Sie Ihre Firewall-Einstellungen. Dies kann auch ein Problem mit der Proxy-Einstellung sein.

0
FCoffee
trying to connect to Host "smtp.gmail.com", port 465, isSSL false

Sie haben eine falsche SMTP-Einstellung für Google Mail festgelegt. Google Mail erfordert SSL. In den Tutorials erfahren Sie, wie Sie E-Mails über Java über Gmail SMTP senden, z. B .: http://www.mkyong.com/Java/javamail-api-sending-email-via -gmail-smtp-example /

0
gerrytan