2

そのため、SASL は Android に実装されていないため、javamail の oauth2 メソッドはそのままでは使用できないことを認識しています。

ただし、gmail imap の Google API ドキュメント ( https://developers.google.com/google-apps/gmail/xoauth2_protocol ) によると、認証トークンを取得してエンコードし、「AUTHENTICATE XOAUTH2 ' サーバーに手動で。

私の問題: javamail IMAP 機能を使用したい (IMAP プロトコル コマンドと応答変更を自分で処理したくない) が、従来のログイン ユーザー名パスワードではなく、適切な認証コマンドを単純に挿入する方法が必要です。

これを行うことができますか?また、それを実行する最も簡単な方法は何ですか? 独自の認証方法を作成して、これを簡単に実装できますか?

または、接続を作成してから、これを IMAPStore に渡すことはできますか (接続プールを作成および管理するため、これが機能するかどうかは疑問です)。

- -編集 - -

より具体的に言うと、javax.security.sasl メソッドは、Imap.protocol.IMAPSaslAuthenticator が依存する Android には実装されていません。

4

3 に答える 3

4

私はimapのsaslサポートを備えた動作中のjarを持っています(smtpの場合、androidのjavaメールにはsmtpのsaslインフラストラクチャがないため、あなたが言ったようにコマンドを発行する必要があります)。私がしたのは、パッケージjavax.security.saslとjavax.security.auth.callbackをAndroidソースのJavaメールに追加し、それを再パッケージ化することだけでした。別のnamaspace、myjavax.security.saslなどに配置する必要がありました。そうしないと、Androidビルドシステムがパッケージにコアライブラリが含まれていると文句を言いますが、コア名前空間にあるjavax.mailについて文句を言わない理由はわかりません( javax)。また、一部のクラスで新しい名前空間のインポートを変更する必要がありましたが、基本的には、packegesクラス自体とcom.sun.mail.imap.protocol.IMAPSaslAuthenticatorです。これにより、AndroidAccountManagerから取得したoauth2トークンを使用してGmailimapサーバーへの認証に成功しました。他に何も試しませんでした。SMTPについては、ここで私の答えを見ることができますXOauthを使用したAndroidのJavamailapi ここから新しいクラスを取得するSaslでsmtpを機能させることが可能だと思いますhttp://kenai.com/projects/javamail/sources/mercurial/show/mail/src/main/java/com/ SMTPをSaslでサポートしているsun/mail/ smtp。私が行うのはいくつかのGPLクラスを追加することだけなので、これは完全に問題ないと思います。追加したのはJDKからのものです。これがお役に立てば幸いです。jarファイルやその方法についてさらに説明が必要な場合は、質問してください。

于 2012-11-24T14:56:49.550 に答える
1

There's no way to do this without hacking the JavaMail classes.

Can't you just use username/password authentication?

于 2012-10-19T19:20:32.043 に答える
0

https://java.net/projects/javamail/pages/OAuth2から:

JavaMail 1.5.5 以降では、OAuth2 認証のサポートが組み込まれており、SASL は不要になりました。

于 2016-04-25T13:07:54.247 に答える