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

我正在构建一个使用Gmail备份某些数据的应用。 我使用XOAUTH连接到Gmail并获得令牌和秘密。 但我无法连接到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; 

运行时,它会报告以下exception。

 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) )后,我注意到在显示Tempory System Error之前我收到了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.* 

其他人也遇到过这个错误 。

尝试他们给出的建议:

我取消注册,然后在每个会话之间注册安全提供程序,并进行修复。 不知道为什么……

我最终得到了它的工作。 事实certificate我在我正在使用的系统上需要更新版本的Java。 一旦我升级了东西开始工作没有问题。