2011-12-23 15 views
6

Quiero hacer una función que pueda enviar correos electrónicos a cualquier destinatario específico (gmail). El problema al que me enfrento es que mi autenticación falla cuando intento proporcionar credenciales que usan autenticación bidireccional en gmail. Con la cuenta sin autenticación bidireccional, funciona bien. Entonces, ¿qué tengo que hacer para que las cosas sucedan con las autenticaciones bidireccionales habilitadas?Envío de correo electrónico a través de java en la cuenta de Gmail con autenticación bidireccional

A continuación se muestra el código que estoy utilizando para enviar correos electrónicos.

public static boolean sendMail(String fromMail, String fromPassword, String toMail, String message) { 
     try { 
      final String user = fromMail, password = fromPassword; 
      Properties prop = new Properties(); 
      prop.setProperty("mail.smtp.host", "smtp.gmail.com"); 
      prop.setProperty("mail.smtp.port", "465"); 
      prop.setProperty("mail.smtp.auth", "true"); 
      prop.setProperty("mail.smtp.ssl.enable", "true"); 
//   prop.put("mail.debug", "true"); 

//   prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 

      Session sess = Session.getDefaultInstance(prop, new Authenticator() { 

       @Override 
       protected javax.mail.PasswordAuthentication getPasswordAuthentication() { 
        return new javax.mail.PasswordAuthentication(user, password); 
       } 
      }); 

//   Session sess=Session.getDefaultInstance(prop); 

      sess.setDebug(true); 

      Message msg = new MimeMessage(sess); 

      msg.setFrom(new InternetAddress(fromMail)); 
      msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toMail)); 
      msg.setText(message); 
      msg.setContent(message, "text/html"); 


      Transport.send(msg); 
      return true; 
     } catch (MessagingException msgEx) { 
      msgEx.printStackTrace(); 
      return false; 
     } 
    } 

Respuesta

5

Al crear una contraseña de aplicación específica en https://accounts.google.com/IssuedAuthSubTokens. Consulte también this youtube video en contraseñas específicas de la aplicación.

+0

Revisé los enlaces y obtuve una contraseña específica de la aplicación y soy capaz de iniciar sesión exitosamente en el navegador. Pero en el código aquí en algún lugar, necesito tener que especificar esa contraseña también. Debido a que todavía me está dando error después de generar la contraseña específica de la aplicación también. – ankurtr

+0

Interesante. Hace un tiempo, cuando me encontré con esto, el servicio smtp de google me dio un mensaje de error específico de autenticación bidireccional. ¿Lo has verificado? – Friek

+0

sí, estoy hablando solo de eso. recibo el error llamado "javax.mail.AuthenticationFailedException: 535-5.7.1 Se requiere una contraseña específica de la aplicación". Entonces, ¿qué hacer para resolver eso? – ankurtr

2

hay dos solución para esto:

  1. se puede generar la contraseña específica de la aplicación por el enlace dado por "friek", es decir "https://accounts.google.com/IssuedAuthSubTokens" y utilice el contraseña específica de la aplicación generada en su lugar su contraseña original. He hecho esto y su trabajo

o

  1. La razón por la excepción (javax.mail.AuthenticationFailedException: contraseña específica de la aplicación 535-5.7.1 requiere) que está ocurriendo es que es posible que tenga activó la verificación en dos pasos de su cuenta de Gmail. Si usa una cuenta en la que no activa la verificación en dos pasos, puede enviar el correo electrónico con su contraseña original. También probé esto y está funcionando bien.
+0

Tienes razón, acabo de crear una nueva cuenta sin autenticación en dos pasos y funcionó sin problemas. Gracias por la ayuda !! – Akash5288

Cuestiones relacionadas