2011-12-23 11 views
6

Desidero eseguire una funzione che può inviare e-mail a qualsiasi destinatario specificato (gmail). Il problema che sto affrontando è che la mia autenticazione fallisce quando provo a fornire credenziali che utilizzano l'autenticazione bidirezionale in gmail. Con account che non hanno un'autenticazione bidirezionale, funziona bene. Quindi cosa devo fare per far sì che le cose accadano con le autenticazioni a due vie abilitate?Invio di e-mail tramite java in account Gmail con autenticazione a due vie

Di seguito è riportato il codice che sto utilizzando per inviare e-mail.

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; 
     } 
    } 

risposta

5

Creando una password specifica per l'applicazione a https://accounts.google.com/IssuedAuthSubTokens. Controlla anche this youtube video su password specifiche dell'applicazione.

+0

Ho controllato i collegamenti e ottenuto una password specifica per l'applicazione e sono in grado di accedere correttamente al browser. Ma nel codice qui in qualche posto ho bisogno di specificare anche quella password. Perché mi sta ancora dando errore dopo aver generato anche una password specifica per l'applicazione. – ankurtr

+0

Interessante. Qualche tempo fa, quando mi sono imbattuto in questo, il servizio smtp di google mi ha dato un messaggio di errore specifico dell'autorizzazione a 2 vie. Ti è capitato di controllarlo? – Friek

+0

sì, sto parlando solo di questo. sto ricevendo quell'errore chiamato "javax.mail.AuthenticationFailedException: 535-5.7.1 Password specifica dell'applicazione richiesta." Quindi cosa fare per risolvere questo? – ankurtr

2

ci sono due soluzioni per questo:

  1. È possibile generare la password specifica applicazione dal link dato da "friek" cioè "https://accounts.google.com/IssuedAuthSubTokens" e utilizzare il generata password specifica dell'applicazione in luogo la password originale. Ho fatto questo e il suo lavoro

o

  1. Il motivo per cui l'eccezione (javax.mail.AuthenticationFailedException: Password 535-5.7.1 Application-specifico richiesto) sta avvenendo è che si può avere attivato la verifica in due passaggi del tuo account Gmail. Se si utilizza un account in cui non si attiva la verifica in due passaggi, è possibile inviare l'e-mail con la propria password originale. Ho anche provato questo e funziona bene.
+0

Hai ragione, ho appena creato un nuovo account senza autenticazione in due passaggi e ha funzionato perfettamente per me. Grazie per l'aiuto !! – Akash5288