我正在构建一个使用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;
运行时,会报告以下异常。
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。有人会帮助我吗?
答案 0 :(得分:1)
我面临同样的问题。
启用调试(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.*
答案 1 :(得分:0)
尝试他们给出的建议:
我取消注册,然后在每个会话之间注册安全提供程序,并进行修复。不知道为什么......
和
我最终让它运转起来了。事实证明,我需要在我正在使用的系统上使用更新版本的Java。一旦我升级了东西开始工作没有问题。