2010-06-03 29 views
8

Recibo este error cuando intento enviar un correo usando la API de JavaMail. Estoy seguro de que el nombre de usuario y la contraseña son 100% correctos. La cuenta de Gmail que estoy conectando es una cuenta anterior, porque dicen que lleva tiempo trabajar con cuentas nuevas.JavaMail con Gmail: 535-5.7.1 Nombre de usuario y contraseña no aceptados

 
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) 

y este es mi código:

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: El valor codificado base 64 de la contraseña era visible en el post original. Lo eliminé hace una hora, pero aún está visible en el historial de edición. Te recomiendo encarecidamente que cambies tu contraseña de Gmail antes de que un pirata informático malintencionado pueda romper tu cuenta de Gmail. – BalusC

Respuesta

5

El fragmento de código dado funciona bien en mi cuenta de Gmail, por lo que este problema se encuentra en otro lugar. ¿Sigues the link given in the error message? Contiene los siguientes consejos:

  • Asegúrese de que ha introducido su dirección de correo electrónico completa (por ejemplo [email protected])
  • Vuelva a introducir su contraseña para asegurarse de que es correcta. Tenga en cuenta que las contraseñas distinguen entre mayúsculas y minúsculas.
  • Asegúrese de que su cliente de correo no esté configurado para verificar correo nuevo con demasiada frecuencia. Si su cliente de correo comprueba si hay mensajes nuevos más de una vez cada 10 minutos, es posible que su cliente solicite repetidamente su nombre de usuario y contraseña.

Especialmente el último punto es importante. Google es muy estricto en esto. Si intentas conectar Gmail, por ejemplo, más de 10 veces en un minuto programáticamente, es posible que ya te bloqueen. Tenga un poco de paciencia, después de un tiempo se desbloqueará.

Si desea obtener más libertad para enviar correos, le recomiendo que busque un host de correo dedicado o que configure su propio servidor de correo, como Apache James o Microsoft Exchange. Ya he answered this in detail en una de sus preguntas anteriores.

+0

hhey gracias ... funcionó ..! ¿Puedes decirme cómo enviar un correo usando jsp .. !!Estoy tratando de implementar 'Olvidé mi contraseña' en un sitio web. ¿Hay alguna idea o sugerencia de parte de usted para implementar esto? – simplyblue

+0

Simplemente cree una clase de servlet que realice la tarea y cree un formulario HTML en JSP que envíe a la URL donde está escuchando este servlet. En el método de servlet, puede escribir y llamar al código Java real de la forma habitual. Aprenda más sobre JSP/Servlet aquí: http://courses.coreservlets.com/Course-Materials/csajsp2.html – BalusC

2

Me encontré con el mismo problema, para mí la razón es que he activado 2-step verification en mi cuenta de gmail.

Después de generar una nueva contraseña específica de la aplicación y usarla en mi aplicación java, este problema "535 5.7.1" ha desaparecido.

Puede generar una nueva contraseña específica de la aplicación siguiendo este official google guide.

+0

Gracias Jifeng !!! – Davidea

0

tengo el mismo mensaje de error y así es como he resuelto el problema,

Crear una contraseña de aplicación: aquí es cómo podemos generar una contraseña de aplicación,

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. 

trabajé para una Spring boot app y obtengo la contraseña de la aplicación, por ejemplo, sadsadaffferere para la dirección de correo electrónico, [email protected]. Por lo tanto, necesito configurar las propiedades de la aplicación como la siguiente,

# 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] 

Todo funciona bien después

Cuestiones relacionadas