2013-01-09 8 views
6

ユーザー名とパスワードを使用するのではなく、AndroidのAccountManagerから受け取ったトークンを使用して簡単なIMAP/SMTP gmailクライアントを実装しようとしています。 私はgetAuthToken()にauthTokenTypeパラメータとして "mail"を使用しようとしています。AccountManagerトークンを使用したIMAP/SMTP認証

GoogleはのOAuth2 http://code.google.com/p/google-mail-oauth2-tools/source/browse/#svn%2Ftrunk%2Fjava%2Fcom%2Fgoogle%2Fcode%2Fsamples%2Foauth2 http://code.google.com/p/google-mail-oauth2-tools/wiki/JavaSampleCode

でSMTP/IMAPのこの例を提供していますが、Javaのためのものです。 Androidプロジェクトでこれを使用すると、一部のインポート(SASLについて)がありません。私はコンパイルこのライブラリhttp://code.google.com/p/asmack/

例を使用しますが、私は、実行時に問題に気付き、それらを解決するために

10-04 10:05:44.715: I/System.out(1226): DEBUG: setDebug: JavaMail version 1.4.1 
10-04 10:05:44.750: I/System.out(1226): DEBUG: mail.imap.fetchsize: 16384 
10-04 10:05:44.750: I/System.out(1226): DEBUG: enable SASL 
10-04 10:05:44.750: I/System.out(1226): DEBUG: SASL mechanisms allowed: XOAUTH2 
10-04 10:05:46.137: I/System.out(1226): * OK Gimap ready for requests from 84.221.66.29 o42if871216eef.60 
10-04 10:05:46.137: I/System.out(1226): A0 CAPABILITY 
10-04 10:05:46.805: I/System.out(1226): * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 
10-04 10:05:46.805: I/System.out(1226): A0 OK Thats all she wrote! o42if871216eef.60 
10-04 10:05:46.805: I/System.out(1226): IMAP DEBUG: AUTH: XOAUTH 
10-04 10:05:46.805: I/System.out(1226): IMAP DEBUG: AUTH: XOAUTH2 
10-04 10:05:46.813: I/System.out(1226): DEBUG: protocolConnect login, host=imap.gmail.com, [email protected], password=<non-null> 
10-04 10:05:46.813: I/dalvikvm(1226): Could not find method javax.security.sasl.Sasl.createSaslClient, referenced from method com.sun.mail.imap.protocol.IMAPSaslAuthenticator.authenticate 
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to resolve static method 44358: Ljavax/security/sasl/Sasl;.createSaslClient ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;Ljavax/security/auth/callback/CallbackHandler;)Ljavax/security/sasl/SaslClient; 
10-04 10:05:46.813: D/dalvikvm(1226): VFY: replacing opcode 0x77 at 0x0050 
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to resolve exception class 5975 (Ljavax/security/sasl/SaslException;) 
10-04 10:05:46.813: W/dalvikvm(1226): VFY: unable to find exception handler at addr 0x83 
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejected Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;.authenticate ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z 
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejecting opcode 0x0d at 0x0083 
10-04 10:05:46.844: W/dalvikvm(1226): VFY: rejected Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator;.authenticate ([Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z 
10-04 10:05:46.844: W/dalvikvm(1226): Verifier rejected class Lcom/sun/mail/imap/protocol/IMAPSaslAuthenticator; 
10-04 10:05:46.844: I/System.out(1226): IMAP DEBUG: Can't load SASL authenticator: java.lang.ClassNotFoundException: com.sun.mail.imap.protocol.IMAPSaslAuthenticator 
10-04 10:05:46.844: I/System.out(1226): A1 LOGIN [email protected] anonymous 
10-04 10:05:48.137: I/System.out(1226): A1 NO [AUTHENTICATIONFAILED] Invalid credentials (Failure) 
10-04 10:05:48.164: W/System.err(1226): javax.mail.AuthenticationFailedException: [AUTHENTICATIONFAILED] Invalid credentials (Failure) 
10-04 10:05:48.176: W/System.err(1226):   at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:566) 
10-04 10:05:48.176: W/System.err(1226):   at javax.mail.Service.connect(Service.java:288) 
10-04 10:05:48.176: W/System.err(1226):   at xxx.xxx.xxx.OAuth2Authenticator.connectToImap(OAuth2Authenticator.java:111) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.OAuth2Authenticator.initialize(OAuth2Authenticator.java:60) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.TR_Incoming.onTimeout(TR_Incoming.java:106) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.AlarmThread$1.handleMessage(AlarmThread.java:80) 
10-04 10:05:48.180: W/System.err(1226):   at android.os.Handler.dispatchMessage(Handler.java:99) 
10-04 10:05:48.180: W/System.err(1226):   at android.os.Looper.loop(Looper.java:137) 
10-04 10:05:48.180: W/System.err(1226):   at xxx.xxx.xxx.AlarmThread.run(AlarmThread.java:94) 

そのasmackがorg.apache.harmony.javax.securityを使用するようです。*ではなくjavax.securityの。*

誰でもこの問題に直面していますか? Googleでは、このような可能性を例には考えていないようだが、ユーザーにとっては共通の機能だと思う。

ありがとうございました。

+0

問題は 'com.sun.mail.imap.protocol.IMAPSaslAuthenticator'参照' javax.security.sasl'クラスが欠落しているという事実から生じるが。 javamailのソースを取得する必要があります(例:[ここから](http://repository.springsource.com/ivy/bundles/external/javax.mail/com.springsource.javax.mail/1.4.5/com)。 springsource.javax.mail-1.4.5.jar)、 'IMAPSaslAuthenticator'のインポートを' 'asmack'(http:// code)で利用可能な' org.apache.harmony.javax.security.sasl'クラスに変更します。 google.com/p/asmack/)を参照してください。 – Stan

答えて

1

ログからは、java6ファイルとjava7ファイルが混在しているように見えます。クラスパスの詳細を共有できますか?

もう1つの可能性は、正しい資格情報を持っていないことです。loginかpwdが間違っています。

私はあなたが持っているものを試してきましたが、それはうまくいっていて、まっすぐでなければなりません。

+0

ここでアンドロイドシステムについて話しています。 – Mannaz

+0

間違ったメールjarファイルを取得してプロジェクトに組み込んでいる可能性はありますか? 「見つかりませんでした」クラスはjava7にのみあります。また、彼が見ている例は、おそらくアンドロイドの動作例ではありません。そのJavaの実例。私は疑問に思うだろう.. – Siddharth

+0

私は今、https://github.com/ruiaraujo/javamail_androidを使用しています。 – Pascal

4

はJavaMailを使用したASMACK認証を使用するために私はここに利用できるライブラリのパッチを当てたバージョンを作成しました:http://www.mannaz.at/codebase/imap-ssl-mail-android/

をそれはhttp://code.google.com/p/javamail-android/に基づいていますが、ASMACK SASSL認証をサポートしています。

このクラスはJARファイルにはありません。ちょうどあなたのソースコードに追加します。

package com.falott.ingresss.util; 
public class Log { 
    public static boolean loggingEnabled(){ 
     return false; 
    } 
} 
+0

こんにちは、あなたの側の指示に従いましたが、 'connectToImap'を呼び出すときにこのエラーが発生します。 ' 08- 2422:22:51.967:W/dalvikvm(31957):VFY:静的メソッドを解決できません4410:Lcom/falott/ingresss/util/Log; .loggingEnabled()Z 08-24 22:22:51.967:W/dalvikvm(31957):VFY:静的メソッドを解決できません4410:Lcom/falott/ingresss/util/Log; .loggingEnabled()Z' アイデアはありますか? –

+0

はい、その参照を削除するのを忘れました。そのパッケージの下のクラスに静的ダミーメソッドを作成するだけで、うまくいくはずです。 – Mannaz

+0

こんにちは、(GMail/IMAPのいくつかのバグを修正するために)最新のJavaメールでパッチを適用したバージョンを再構築したいと思います。 – Pascal

関連する問題