2010-06-03 9 views
8

Je reçois cette erreur lorsque j'essaie d'envoyer un message à l'aide de l'API JavaMail. Je suis sûr que le nom d'utilisateur et le mot de passe sont 100% corrects. Le compte Gmail que je connecte est un compte plus ancien, car ils disent qu'il faut du temps pour travailler avec de nouveaux comptes.JavaMail avec Gmail: 535-5.7.1 Nom d'utilisateur et mot de passe non acceptés

 
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 voici 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); 
     } 
    } 
} 
+4

@bobby: La valeur codée base64 de votre mot de passe a été visible dans le message original. Je l'ai supprimé il y a une heure, mais il est toujours visible dans l'historique des modifications. Je vous recommande fortement de changer votre mot de passe Gmail avant qu'un pirate malveillant puisse casser votre compte Gmail. – BalusC

Répondre

5

L'extrait de code donné fonctionne très bien sur mon compte Gmail, donc ce problème se trouve ailleurs. Avez-vous suivi the link given in the error message? Il contient les indications suivantes:

  • Assurez-vous que vous avez entré votre adresse e-mail complète (par exemple [email protected])
  • Entrez votre mot de passe pour vous assurer qu'il est exact. 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 de nouveaux messages trop souvent. Si votre client de messagerie vérifie les nouveaux messages plus d'une fois toutes les 10 minutes, votre client peut vous 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 par exemple de connecter Gmail plus de 10 fois par minute, il est possible que vous soyez déjà 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 vous recommande de rechercher un hôte de messagerie dédié ou de configurer votre propre serveur de messagerie, tel qu'Apache James ou Microsoft Exchange. J'ai déjà answered this in detail dans l'une de vos questions précédentes.

+0

hhey merci ... cela a fonctionné .. !! pouvez-vous me dire comment envoyer un mail en utilisant jsp .. !!Im essayant de mettre en application «oublié le mot de passe» dans un site Web sont là toutes les idées et suggestions de vous pour mettre en application ceci ..! – simplyblue

+0

Il suffit de créer une classe de servlet qui exécute la tâche et crée un formulaire HTML dans JSP qui est soumis à l'URL sur laquelle cette servlet écoute. Dans la méthode de servlet, vous pouvez écrire et appeler du code Java réel comme d'habitude. En savoir plus sur JSP/Servlet ici: http://courses.coreservlets.com/Course-Materials/csajsp2.html – BalusC

2

J'ai rencontré exactement le même problème, pour moi la raison est que j'ai allumé 2-step verification 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, le problème "535 5.7.1" a disparu.

Vous pouvez générer un nouveau mot de passe spécifique à l'application après ce official google guide.

+0

Merci Jifeng !!! – Davidea

0

J'ai le même message d'erreur et voici comment je l'ai résolu le problème,

Créer un mot de passe de l'application: voici comment nous pouvons générer un mot de passe de l'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. 

je travaillais pour une Application de démarrage de printemps et je reçois le mot de passe de l'application dire, sadsadaffferere pour l'adresse e-mail, [email protected]. Donc, je dois configurer les propriétés d'applications comme les suivantes,

# 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 très bien après