1

最近,我正在尝试使用 XOAuth2 协议从 Gmail 获取电子邮件。特别是,我正在使用https://code.google.com/p/google-mail-oauth2-tools/downloads/list中的“OAuth2Authenticator.java” 。

但是,我总是收到一个无效的凭证错误,如下所示:

A1 NO [ALERT] Invalid credentials (Failure) 在线程“main”中出现异常 javax.mail.AuthenticationFailedException: [ALERT] Invalid credentials (Failure) at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:566) at javax.mail.Service.connect(Service.java:265)

在阅读之前,由于放链接的限制,我不能写“httoo://”,所以请认为这个http头是一些url信息的前面。

在发布这个问题之前,我想我看了大部分关于这个问题的文章。许多文章都是关于使用 OAuth1.0(已弃用)但是,我仍然无法弄清楚如何使其与 OAuth2 和 XOAuth2 一起使用。我感谢任何建议/帮助。

以下是我正在采取的步骤:

  1. 通过 OAuth2 获取范围为 mail.google.com/ 的访问令牌

  2. 只需将此访问令牌和 gmail 帐户(例如 test@gmail.com)放入“OAuth2Authenticator.java”。

在这个过程之后,我总是得到无效的凭证。

有趣的是,我可以通过Google OAuth2.0 Playground 中指定的Feed URL(即https://mail.google.com/mail/feed/atom )获取未读邮件。

这表明我确信我获得了正确的访问令牌。但是,使用此示例代码对 IMAP 根本不起作用。

实际上,范围“mail.google.com/”并不包含在 Google OAuth2.0 Playground 的列表中。

为了获取 XOAuth2 的访问令牌,还有其他特殊的方法来获取访问令牌吗?

对于XOAuth2的官方页面,我们需要使用base64对访问令牌进行编码。但是,我认为示例代码正在执行此过程。

此外,此示例的 SMTP 根本不起作用。但是,在更改属性后,我可以让它工作。这段代码是旧的吗?但是,不幸的是,我需要的是 IMAP。但是,在尝试设置一些不同/新的属性后,IMAP 根本不起作用......

我被这个问题困扰了很长时间。所以,我发布了这个问题。我非常感谢任何建议/帮助。

问候

4

1 回答 1

0

我发现您关于无效凭据的问题

A1 NO [ALERT] Invalid credentials (Failure) Exception in thread "main"        
javax.mail.AuthenticationFailedException: [ALERT] Invalid credentials (Failure) at 
com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:566) at
javax.mail.Service.connect(Service.java:265)

要消除上述错误,您必须使您的令牌无效并使用以下代码获取新令牌

1- accountManager.invalidateAuthToken("com.google", token);

使令牌无效后,您必须使用以下代码获取刷新令牌

String newToken = AccountManager.get(this).getAuthToken(new Account(account,"com.google"),
             AUTH_TOKEN_TYPE, true, null, null).getResult().getString(AccountManager.KEY_AUTHTOKEN);

使用新令牌现在您可以登录了。

于 2013-10-08T12:41:29.900 回答