web-dev-qa-db-fra.com

Résoudre l'erreur javax.mail.AuthenticationFailedException

Je ne suis pas familier avec cette fonction pour envoyer du courrier en Java. Je reçois une erreur lors de l'envoi d'un courrier électronique pour réinitialiser un mot de passe. J'espère que vous pourrez me donner une solution.

Ci-dessous mon 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;
    }
}

Lance l'erreur suivante:

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: tentative de connexion à l'hôte "smtp.gmail.com", port 465, isSSL false 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp

DEBUG SMTP: connecté à l'hôte "smtp.gmail.com", port: 465

EHLO fatin

250-mx.google.com à votre service, [175.139.198.14]

TAILLE 250 35882577

250-8BITMIME

CONNEXION 250 AUTH PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN

CODE D'ETAT AMELIORE DE 250

250 CHUNKING

DEBUG SMTP: extension trouvée "SIZE", arg "35882577"

DEBUG SMTP: extension trouvée "8BITMIME", arg ""

DEBUG SMTP: extension trouvée "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"

DEBUG SMTP: extension trouvée "ENHANCEDSTATUSCODES", arg ""

DEBUG SMTP: extension trouvée "CHUNKING", arg ""

DEBUG SMTP: tentative d'authentification

AUTH LOGIN

334 VXNlcm5hbWU6

YWNjb3VudEBibG9vbWluZy5jb20ubXk =

334 UGFzc3dvcmQ6

Ymxvb21pbmc = 535-5.7.8 Le nom d'utilisateur et le mot de passe n'ont pas été acceptés. Pour en savoir plus, consultez la page 535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257

m4sm5929870pbg.38 - gsmtp

[STDOUT] javax.mail.AuthenticationFailedException

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

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

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

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

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

32
Fatin Az

Vous devriez changer le port en 587, J'ai testé votre code et il fonctionne bien

Si l'erreur persiste, remplacez la variable de session par le code ci-dessous:

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

Ce problème peut être dû à la protection du compte Gmail. Il suffit de cliquer sur le lien ci-dessous et de désactiver les paramètres de sécurité. Cela fonctionnera. https://www.google.com/settings/security/lesssecureapps

76
Raj008
20
Anil Amane

Par défaut, le compte Gmail est hautement sécurisé. Lorsque nous utilisons gmail smtp à partir d'un outil non gmail, les courriers électroniques sont bloqués. Pour tester dans notre environnement local, sécurisez votre compte gmail en tant que

  1. Connectez-vous à Gmail.
  2. Accédez à l'URL en tant que https://www.google.com/settings/security/lesssecureapps
  3. Sélectionnez "Activer"
10
amitkumar

La plupart des erreurs AuthenticationFieldException se produisent lorsque la tentative de connexion est empêchée, connectez-vous d'abord à votre compte gmail, puis accédez à l'écran https://www.google.com/settings/security/lesssecureapps et cochez-le. J'ai résolu ce genre de problème de cette façon.

8
sawpyae

Modifiez ceci (définir une application moins sécurisée): https://www.google.com/settings/security/lesssecureapps

4
Do Nhu Vy

Si vous vous connectez à votre compte Gmail à partir d'une nouvelle application ou d'un nouvel appareil, Google bloque peut-être cet appareil. Essayez de suivre ces étapes:

Pour protéger votre compte, Google peut rendre plus difficile la connexion à votre compte si nous soupçonnons que ce n’est pas vous. Par exemple, Google peut vous demander des informations supplémentaires en plus de votre nom d'utilisateur et de votre mot de passe si vous voyagez ou si vous essayez de vous connecter à votre compte depuis un nouvel appareil.

Accédez à https://g.co/allowaccess à partir d'un autre appareil que vous avez précédemment utilisé pour accéder à votre compte Google et suivez les instructions. Essayez de vous connecter à nouveau à partir de l'application bloquée.

4
Mate Šimović

Je reçois la même erreur depuis longtemps.

Quand j'ai changé le débogage de session en vrai

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

J'ai eu l'aide url https://support.google.com/mail/answer/78754 à partir de la console avec javax.mail.AuthenticationFailedException.

A partir des étapes du lien, j'ai suivi chaque étape. Lorsque j'ai modifié mon mot de passe avec un mélange de lettres, de chiffres et de symboles, le courrier électronique a été généré sans exception d'authentification.

Remarque: mon ancien mot de passe était plus moins sécurisé.

2
Vino

2 raisons possibles:

  • Votre nom d'utilisateur peut nécessiter l'ID de messagerie complet '[email protected]'
  • Le plus évident: le mot de passe est faux. Déboguer pour voir si le mot de passe utilisé est correct.
1
Kedar

La solution qui fonctionne pour moi comporte deux étapes.

  1. Premier pas

    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. Activer la sécurité gmail

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

Juste au cas où quelqu'un chercherait une solution à ce problème.

Les problèmes d’authentification peuvent être atténués en activant la vérification Google en deux étapes pour le compte utilisé et en créant un mot de passe spécifique à l’application. J'ai eu le même problème que l'OP. Activer 2 étapes a fonctionné.

0
Anil Muppalla

J'ai eu ce problème aussi, mais la solution n'a rien à voir avec le codage. Assurez-vous de pouvoir vous connecter à gmail. Ping smtp.gmail.com. Si vous ne recevez pas de réponse, vérifiez les paramètres de votre pare-feu. Il pourrait également s'agir d'un problème de paramétrage de proxy.

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

Vous avez mal paramétré votre smtp gmail. Gmail nécessite SSL. Veuillez consulter les tutoriels sur la manière d'envoyer un courrier électronique via Java via Gmail SMTP, par exemple: http://www.mkyong.com/Java/javamail-api-sending-email-via-via). -gmail-smtp-example /

0
gerrytan