2011-12-23 77 views
6

我想做一個可以發送電子郵件到任何指定收件人(gmail)的函數。我正面臨的問題是當我嘗試提供在gmail中使用雙向身份驗證的憑據時,我的身份驗證失敗。通過帳戶沒有雙向身份驗證,它工作正常。那麼我需要做些什麼來使事情發生在啓用雙向認證的情況下?通過雙向認證的gmail帳戶中的java發送電子郵件

以下是我用來發送電子郵件的代碼。

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

回答

5

通過在https://accounts.google.com/IssuedAuthSubTokens上創建應用專用密碼。還請查看this youtube video關於應用程序特定的密碼。

+0

我檢查了鏈接並獲得了一個特定於應用程序的密碼,並且我能夠成功登錄到瀏覽器。但是在這裏的代碼中,我需要指定那個密碼。因爲它也生成應用程序特定的密碼後仍然給我錯誤。 – ankurtr 2011-12-23 22:06:18

+0

有趣。前一段時間,當我遇到這種情況時,谷歌smtp服務給了我一個雙向auth特定的錯誤信息。你碰巧檢查過嗎? – Friek 2011-12-23 22:16:56

+0

是的,我只是在說這個。我得到名爲「javax.mail.AuthenticationFailedException:535-5.7.1需要應用程序特定的密碼」的錯誤。那麼該怎麼做才能解決這個問題? – ankurtr 2011-12-23 22:19:17

2

這有兩個解析:

  1. 您可以生成由給定鏈路的專用密碼「friek」,即「https://accounts.google.com/IssuedAuthSubTokens」和使用生成應用程序專用密碼的地方你的原始密碼。我已經做到了這一點,其工作

  1. 爲什麼異常的原因(javax.mail.AuthenticationFailedException:535-5.7.1應用專用密碼是必需的)發生的是,你可能有激活了您的gmail帳戶的兩步驗證。如果您使用的帳戶未啓用兩步驗證,則可以通過原始密碼發送電子郵件。我也試過這個,它的工作正常。
+0

你是對的,我剛剛創建了沒有兩步驗證的新帳戶,它對我來說工作順利。感謝幫助 !! – Akash5288 2016-11-02 08:11:06

相關問題