JavaMail avec Gmail: 535-5.7. 1 Nom d'utilisateur et mot de passe non acceptés


J'obtiens cette erreur lorsque j'essaie d'envoyer un courrier en utilisant l'API JavaMail. Je suis sûr que le nom d'utilisateur et le mot de passe sont corrects à 100%. Le compte Gmail que je connecte est un compte plus ancien, car ils disent qu'il faut du temps pour qu'il fonctionne avec de nouveaux comptes.

DEBUG SMTP RCVD: 535-5.7.1 Username and Password not accepted. Learn more at

535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 x35sm3011668
wfh.6

javax.mail.SendFailedException: Sending failed;
  nested exception is:
        javax.mail.AuthenticationFailedException
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at Main.(Main.java:41)
        at Main.main(Main.java:51)

Et c'est mon code:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Main
{
    String  d_email = "[email protected]",
            d_password = "pass",
            d_host = "smtp.gmail.com",
            d_port  = "465",
            m_to = "[email protected]",
            m_subject = "Testing",
            m_text = "testing email.";

    public Main()
    {
        Properties props = new Properties();
        props.put("mail.smtp.user", d_email);
        props.put("mail.smtp.host", d_host);
        props.put("mail.smtp.port", d_port);
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.socketFactory.port", d_port);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        SecurityManager security = System.getSecurityManager();

        try
        {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            MimeMessage msg = new MimeMessage(session);
            msg.setText(m_text);
            msg.setSubject(m_subject);
            msg.setFrom(new InternetAddress(d_email));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
            Transport.send(msg);
        }
        catch (Exception mex)
        {
            mex.printStackTrace();
        } 
    }

    public static void main(String[] args)
    {
        Main blah = new Main();
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator
    {
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(d_email, d_password);
        }
    }
}
Author: BalusC, 2010-06-03

3 answers

L'extrait de code donné fonctionne bien sur mon compte Gmail, donc ce problème se trouve ailleurs. Avez-vous suivi le lien donné dans le message d'erreur? Il contient les conseils suivants:

  • Assurez-vous que vous avez entré votre adresse e-mail complète (par exemple [email protected])
  • Entrez à nouveau votre mot de passe pour vous assurer qu'il est correct. Gardez à l'esprit que les mots de passe sont sensibles à la casse.
  • Assurez-vous que votre client de messagerie n'est pas configuré pour rechercher un nouveau courrier trop souvent. Si votre client de messagerie vérifie les nouveaux messages plus d'une fois toutes les 10 minutes, votre client peut demander à plusieurs reprises votre nom d'utilisateur et votre mot de passe.

Surtout le dernier point est important. Google est très strict dans ce domaine. Si vous essayez de connecter Gmail par exemple plus de 10 fois en une minute par programme, vous pouvez déjà être bloqué. Ayez un peu de patience, après un certain temps, il sera débloqué.

Si vous souhaitez plus de liberté dans l'envoi de mails, je recommande pour rechercher un hôte de messagerie dédié ou pour configurer votre propre serveur de messagerie, tel qu'Apache James ou Microsoft Exchange. J'ai déjà répondu en détail dans l'une de vos questions précédentes.

 6
Author: BalusC, 2017-05-23 12:02:50

J'ai rencontré exactement le même problème, pour moi la raison en est que j'ai activé Vérification en 2 étapes sur mon compte gmail.

Après avoir généré un nouveau mot de passe spécifique à l'application et l'avoir utilisé dans mon application java, ce problème "535 5.7.1" a disparu.

Vous pouvez générer un nouveau mot de passe spécifique à l'application en suivant ce guide officiel de Google.

 4
Author: Jifeng Zhang, 2012-12-21 07:41:36

J'ai le même message d'erreur et voilà comment j'ai résolu le problème,

Créer un mot de passe d'application: voici comment générer un mot de passe d'application,

1. Visit your App passwords page. You may be asked to sign in to your Google Account.

2. At the bottom, click Select app and choose the app you’re using.
Click Select device and choose the device you’re using.

3. Select Generate.

4. Follow the instructions to enter the App password (the 16 character code in the yellow bar) on your device.

5. Select Done.

J'ai travaillé pour une application Spring boot et j'obtiens le mot de passe de l'application, sadsadaffferere pour l'adresse e-mail, [email protected]. J'ai donc besoin de configurer les propriétés de l'application comme suit,

# the email settings
# ------------------
spring.mail.host=smtp.gmail.com
[email protected]
spring.mail.password=sadsadaffferere
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=false
[email protected]

Tout fonctionne bien après

 0
Author: Yoda, 2017-11-04 03:19:33