2

我目前正在尝试使用服务帐户及其 P12 密钥连接到简单 Gmail 用户的 Imap 服务器。

http://code.google.com/p/java-gmail-imap/wiki/GmailAndXOAUTH2中所述,我成功地为域范围的委托服务帐户实现了它。

但是,我无法连接到普通的旧 gmail 帐户。

生成 OAuth 2.0 令牌的代码是:

public static String getAccessToken(String email) throws Exception {
       HttpTransport httpTransport = new NetHttpTransport();

JacksonFactory jsonFactory = new JacksonFactory();

GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(httpTransport)
    .setJsonFactory(jsonFactory)
    .setServiceAccountId(SingleUserCredentials.SERVICE_ACCOUNT_EMAIL)
    .setServiceAccountScopes("https://mail.google.com/")
    .setServiceAccountPrivateKeyFromP12File(
    new java.io.File(SingleUserCredentials.SERVICE_ACCOUNT_PKCS12_FILE_PATH))
            .setServiceAccountUser(SingleUserCredentials.EMAIL)
            .build();

    credential.refreshToken();
    return credential.getAccessToken();
}

然后我连接到 ImapStore,如:

String authToken = getAccessToken(SingleUserCredentials.EMAIL);

OAuth2Authenticator.initialize();

IMAPStore imapSslStore = OAuth2Authenticator.connectToImap(
    "imap.gmail.com",
    993,
    SingleUserCredentials.EMAIL,
    authToken,
    true);

我总是在线程“main”javax.mail.AuthenticationFailedException 中遇到异常:[ALERT] Invalid credentials (Failure)。

这里至少有两件事很奇怪:

  1. 带有 OAuth 2.0 私钥的 Imap 适用于 Google Apps 域的域范围委派。
  2. 我用于简单 gmail 帐户的证书非常适合该用户的 GDrive 和其他 Google 服务。
4

0 回答 0