2016-12-16 123 views
0

這裏我試圖使用IMAP(gmail API)登錄Gmail,但是當傳遞用戶名&密碼,然後即時獲取Invocation TargetException。 這裏是我的代碼使用IMAP登錄到Gmail的java.lang.reflect.InvocationTargetException

`Properties props = System.getProperties(); 
props.setProperty("mail.store.protocol", "imaps"); 
Session session = Session.getDefaultInstance(props, null); 
Store store = session.getStore("imaps"); 
store.connect("imap.gmail.com", "<username>@gmail.com", "<password>"); 
//Here im getting exception and below is the log 
Exception in thread "main" javax.mail.AuthenticationFailedException: [ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure) 
at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:474) 
at javax.mail.Service.connect(Service.java:275) 
at javax.mail.Service.connect(Service.java:156) 
} 

請幫助我如何解決this.Thank你。

+0

請包括完整的堆棧跟蹤。 – Max

+0

@Max,即時得到以下異常:異常在線程「主要」 javax.mail.AuthenticationFailedException:[ALERT]請通過網絡瀏覽器登錄:https://support.google.com/mail/accounts/answer/78754(失敗) \t在com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:474) \t在javax.mail.Service.connect(Service.java:275) \t在javax.mail.Service.connect (Service.java:156) – khanam

+0

您是否在您的Gmail帳戶中啓用了「安全性較低的應用程序」?你正在用gmail絆倒安全陷阱。有時候解決這個問題的唯一方法就是使用OAUTH2。 – Max

回答

1

您從Gmail收到了它的人類可讀的測試表明在特定URL警報。這不是一個真正的建議或要求,儘管有「請」這個詞,但這是一項要求。

如果你想登錄,您必須先進行登錄網頁,你必須使用支持JavaScript和能夠分辨驗證碼的瀏覽器。

有辦法避免這種情況,通常。請打開客戶端代碼中的OAUTH2或更改Gmail帳戶中的安全設置。兩者通常都有效,但你無法保證。谷歌使用啓發式和各種魔法來猜測你是真正的用戶還是攻擊者,並且如果評估引擎對特定的登錄信息太不確定,谷歌希望使用雙因素身份驗證或驗證碼。