Résoudre l'erreur javax.courrier.AuthenticationFailedException


Je ne connais pas cette fonction pour envoyer du courrier en java. Je reçois une erreur lors de l'envoi d'un e-mail pour réinitialiser le mot de passe. J'espère que vous pouvez me donner une solution.

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

Renvoie 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: 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)
Author: Bilesh Ganguly, 2013-09-13

14 answers

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

Si une erreur persiste, veuillez changer la variable de session en code ci-dessous:

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
 12
Author: Ha Nguyen, 2013-09-13 04:48:00

Peut être ce problème causé par la protection du compte Gmail. Cliquez simplement sur le lien ci-dessous et désactivez la sécurité settings.It va travailler. https://www.google.com/settings/security/lesssecureapps

 69
Author: Raj008, 2014-11-04 09:13:36
 17
Author: Anil Amane, 2015-05-02 11:32:05

La plupart des erreurs AuthenticationFieldException se produisent lorsque la tentative de connexion a été empêchée, connectez - vous d'abord à votre gmail et accédez à https://www.google.com/settings/security/lesssecureapps et cochez allumer. J'ai résolu ce genre de problème comme ça.

 7
Author: sawpyae, 2015-09-13 15:43:04

Par défaut, le compte Gmail est hautement sécurisé. Lorsque nous utilisons gmail smtp à partir de l'outil non gmail, le courrier électronique est bloqué. Pour tester dans notre environnement local, rendez votre compte gmail moins sécurisé comme

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

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

 3
Author: Do Nhu Vy, 2016-06-20 09:32:17

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

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

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

 3
Author: Mate Šimović, 2016-08-30 10:24:59

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

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

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

J'ai eu l'URL d'aide https://support.google.com/mail/answer/78754 de la console avec javax.courrier.AuthenticationFailedException.

À partir des étapes du lien, j'ai suivi chaque étape. Lorsque j'ai changé mon mot de passe avec un mélange de lettres, de chiffres et de symboles pour être ma surprise, l'e-mail a été généré sans exception d'authentification.

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

 2
Author: Vino, 2016-01-17 09:36:51

2 raisons possibles:

  • Votre nom d'utilisateur peut nécessiter l'identifiant e-mail complet '[email protected]"
  • Le plus évident: Le mot de passe est faux. Déboguez pour voir si le mot de passe utilisé est correct.
 1
Author: Kedar, 2013-10-18 02:03:16
trying to connect to host "smtp.gmail.com", port 465, isSSL false

Vous avez mal configuré votre gmail smtp. Gmail nécessite SSL. Veuillez consulter les tutoriels sur la façon d'envoyer des e-mails via Java via Gmail SMTP, par exemple: http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

 0
Author: gerrytan, 2013-09-13 04:24:33
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendMail1 {

    public static void main(String[] args) {
        // Recipient's email ID needs to be mentioned.
          String to = "valid email to address";

          // Sender's 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();
          }
    }

}
 0
Author: Pana Emp, 2014-09-09 09:29:55

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

Les problèmes d'authentification peuvent être atténués en activant la vérification Google en 2 é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. L'activation de 2 étapes a fonctionné.

 0
Author: Anil Muppalla, 2015-12-25 20:12:36

J'ai également eu ce problème mais la solution n'avait rien à voir avec le codage. Assurez-vous que vous êtes en mesure de 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ètre proxy.

 0
Author: FCoffee, 2016-09-12 19:09:54

La solution qui fonctionne pour moi a deux étapes.

  1. Première étape

    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
    
 0
Author: Jorge Santos Neill, 2018-09-23 21:43:12