2011-12-23 8 views
6

Chcę utworzyć funkcję, która może wysyłać wiadomości e-mail do dowolnego określonego odbiorcy (gmail). Problem, który napotykam, polega na tym, że uwierzytelnianie nie powiedzie się, gdy próbuję podać dane uwierzytelniające, które korzystają z uwierzytelniania dwukierunkowego w Gmailu. Z kontem bez dwukierunkowego uwierzytelniania działa dobrze. Co muszę zrobić, aby wszystko działało z włączonymi uwierzytelnieniami dwukierunkowymi?Wysyłanie wiadomości e-mail przez java na koncie Gmail mającym dwukierunkowe uwierzytelnianie

Poniżej znajduje się kod, którego używam do wysyłania wiadomości 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; 
     } 
    } 

Odpowiedz

5

Po utworzeniu hasła specyficznego dla aplikacji pod numerem https://accounts.google.com/IssuedAuthSubTokens. Sprawdź także this youtube video w sprawie haseł aplikacji.

+0

Sprawdziłem linki i otrzymałem jedno hasło specyficzne dla aplikacji i jestem w stanie pomyślnie zalogować się do przeglądarki. Ale w tym miejscu w pewnym miejscu muszę również podać to hasło. Ponieważ nadal daje mi błąd po wygenerowaniu hasła specyficznego dla aplikacji. – ankurtr

+0

Interesujące. Jakiś czas temu, gdy wpadłem na to, google smtp service dał mi dwukierunkowy komunikat o błędzie specyficzny dla auth. Czy przypadkiem to sprawdziłeś? – Friek

+0

tak, mówię tylko o tym. Otrzymuję ten błąd o nazwie "javax.mail.AuthenticationFailedException: 535-5.7.1 Wymagane jest hasło specyficzne dla aplikacji." Co więc zrobić, aby to rozwiązać? – ankurtr

2

Istnieją dwa rozwiązania tego:

  1. Można wygenerować Application Specific hasła przez link podany przez „friek”, czyli „https://accounts.google.com/IssuedAuthSubTokens” i używania zamówienia wygenerowane hasło specyficzne dla aplikacji w miejsce oryginalnego hasła. Zrobiłem to i jego pracy

lub

  1. Powodem Exception (javax.mail.AuthenticationFailedException: 535-5.7.1 specyficzne dla aplikacji hasło wymagane) dzieje się to, że można mieć aktywował dwuetapową weryfikację konta Gmail. Jeśli korzystasz z konta, na którym nie aktywujesz weryfikacji dwuetapowej, możesz wysłać wiadomość e-mail według oryginalnego hasła. Próbowałem również tego i działa dobrze.
+0

Masz rację, właśnie utworzyłem nowe konto bez uwierzytelniania 2-etapowego i działało dla mnie sprawnie. Dzięki za pomoc !! – Akash5288

Powiązane problemy