2012-07-18 51 views
2

我正在構建一個使用Gmail備份某些數據的應用程序。我使用XOAUTH連接到Gmail並獲得令牌和祕密。但是我無法連接到Gmail的IMAP服務。我遵循http://code.google.com/p/google-mail-xoauth-tools/wiki/JavaSampleCode的示例:無法使用Android上的XOAUTH連接到Gmail IMAP

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

您是否使用AccountManager獲取令牌?如果是的話,你是如何得到這個祕密標記的? – Malachi 2012-08-01 16:12:29

+0

您是否在會話中啓用調試?有什麼輸出上面的例外拋出? – Malachi 2012-08-02 14:08:18

+0

你是如何設法在Android上獲得'oauthTokenSecret'的? – Malachi 2012-08-09 14:24:55

回答

1

我面臨同樣的問題。

啓用調試(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.* 
+0

那麼我們能做些什麼來解決這個問題呢? – 2012-08-07 15:07:27

+0

我現在正在調查其他解決方案,並會報告任何調查結果。目前正在研究將XOAUTH實現爲K9 Mail作爲概念驗證。 – Malachi 2012-08-09 10:43:37

+3

你好,有點晚了派對,但我做了sasl與Android的Java郵件工作。這很容易,android(和java的郵件爲android)只是沒有sasl,javax.security.sasl。*和javax.security.auth.callback。*的類。我將類添加到java郵件,更改命名空間,修改了一些參考代碼,它與imap一起工作(沒有用smtp嘗試,因爲我已經在使用sasl了)。不知道這是否是最好的方式,但是,如果您仍然對此感興趣,請告訴我,明天我會發布代碼。 – alex 2012-11-24 04:01:14

0

其他人也experienced this error

嘗試他們給的建議:

我註銷,然後註冊的每個會話的安全提供者,它dermed修復它。不知道爲什麼,雖然...

我最終得到它的工作。事實證明,我正在使用的系統上需要更新版本的Java。一旦我升級的東西開始工作沒有問題。

+0

這不適合我。謝謝你們一切。 – 2012-09-28 09:36:22