2016-12-16 120 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帐户中的安全设置。两者通常都有效,但你无法保证。谷歌使用启发式和各种魔法来猜测你是真正的用户还是攻击者,并且如果评估引擎对特定的登录信息太不确定,谷歌希望使用双因素身份验证或验证码。