java - 无法在 Android 上使用 XOAUTH 连接到 Gmail IMAP

标签 java android oauth imap gmail-imap

我正在构建一个使用 Gmail 备份一些数据的应用程序。我使用 XOAUTH 连接到 Gmail 并获得了 token 和密码。但是我无法连接到 Gmail 的 IMAP 服务。我按照 http://code.google.com/p/google-mail-xoauth-tools/wiki/JavaSampleCode 中的示例进行操作:

Properties props = new Properties();
props.put("mail.imaps.sasl.enable", "true");
props.put("mail.imaps.sasl.mechanisms", "XOAUTH");
props.put(OAUTH_TOKEN_PROP, oauthToken);
props.put(OAUTH_TOKEN_SECRET_PROP, oauthTokenSecret);
props.put(CONSUMER_KEY_PROP, Const.CONSUMER_KEY);
props.put(CONSUMER_SECRET_PROP, Const.CONSUMER_SECRET);
Session session = Session.getInstance(props);
session.setDebug(debug);

final URLName unusedUrlName = null;
IMAPSSLStore store = new IMAPSSLStore(session, unusedUrlName);
final String emptyPassword = "";
store.connect(host, port, userEmail, emptyPassword);
return store;

运行时报如下异常。

javax.mail.MessagingException: * BYE [UNAVAILABLE] Temporary System Error;
   nested exception is:
    com.sun.mail.iap.ConnectionException: * BYE [UNAVAILABLE] Temporary System Error
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:569)
    at javax.mail.Service.connect(Service.java:288)
    at com.doodlemobile.zy.finenote.OAuthHelperActivity$XoauthAuthenticator.connectToImap(OAuthHelperActivity.java:565)
    at com.doodlemobile.zy.finenote.OAuthHelperActivity$ConnectGmailTask.doInBackground(OAuthHelperActivity.java:484)
    at com.doodlemobile.zy.finenote.OAuthHelperActivity$ConnectGmailTask.doInBackground(OAuthHelperActivity.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:287)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
    at java.lang.Thread.run(Thread.java:856)
 Caused by: com.sun.mail.iap.ConnectionException: * BYE [UNAVAILABLE] Temporary System Error
    at com.sun.mail.iap.Protocol.handleResult(Protocol.java:346)
    at com.sun.mail.imap.protocol.IMAPProtocol.login(IMAPProtocol.java:336)
    at com.sun.mail.imap.IMAPStore.login(IMAPStore.java:615)
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:549)
    ... 11 more

我用的是SUN的javamail。有人愿意帮助我吗?

最佳答案

我遇到了同样的问题。

启用调试后 (session.setDebug(true)) 我注意到我收到了 ClassNotFoundException在显示临时系统错误之前。

08-06 14:38:59.148: I/System.out(3139): DEBUG IMAP: Can't load SASL authenticator: java.lang.ClassNotFoundException: com.sun.mail.imap.protocol.IMAPSaslAuthenticator
08-06 14:38:59.148: I/System.out(3139): DEBUG IMAP: LOGIN command trace suppressed
08-06 14:39:00.265: I/System.out(3139): DEBUG IMAP: LOGIN command result: * BYE [UNAVAILABLE] Temporary System Error
08-06 14:39:00.289: E/com.example.gmailandroid.MainActivity(3139): * BYE [UNAVAILABLE] Temporary System Error
08-06 14:39:00.289: E/com.example.gmailandroid.MainActivity(3139): javax.mail.MessagingException: * BYE [UNAVAILABLE] Temporary System Error;
08-06 14:39:00.289: E/com.example.gmailandroid.MainActivity(3139):   nested exception is:
08-06 14:39:00.289: E/com.example.gmailandroid.MainActivity(3139):  com.sun.mail.iap.ConnectionException: * BYE [UNAVAILABLE] Temporary System Error
08-06 14:39:00.289: E/com.example.gmailandroid.MainActivity(3139):  at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:668)

查看 JavaMail 源代码,这似乎是因为它正在尝试加载 com.sun.mail.imap.protocol.IMAPSaslAuthenticator,它依赖于非 android java 资源。

javax.security.sasl.*

关于java - 无法在 Android 上使用 XOAUTH 连接到 Gmail IMAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536911/

相关文章:

java - Java 中的二维 char 数组创建/初始化

android - JUnit 不适用于 IntelliJ Android 项目

java - 删除所有不可打印字符的正则表达式

delphi - Twitter Oauth Delphi 7 home_timeline 获得 401 未经授权

java - 如何在 Spring 中处理具有并发访问的事务

java - 不能 ssh 吗?可能是我 Mac 上 bash_profile 的问题

java - 使用 Selenium java 长时间运行 webdriver 时内存增加

android - 意外的 android 应用程序终止而没有崩溃异常

objective-c - iOS App 中的用户授权

azure - 在 azure 应用程序中允许database.windows.net范围的位置