3

最近アクティブな上位 X 件の Gmail スレッドのリストを取得する最適な方法を探しています。

バックグラウンド:

Java を使用して、Google Apps for Education ドメインで OAuth を使用して IMAP にアクセスしています。未読メッセージを含む最新の20 スレッドを一覧表示できるGmail Atom 受信トレイ フィードが利用可能です。このフィードへのアクセスは、私が OAuth/IMAP を使用して作成したものよりもはるかに高速です。

Gmail Atom 受信トレイ フィードよりも IMAP アプローチを使用する利点は、IMAP を使用すると、任意の数のメッセージ (20 だけでなく) にアクセスし、メッセージを読んだり、スレッド サイズを取得したり、関連する Google ラベルを取得したり、クォータの詳細を取得したり、チェックしたりできることです。フラグ。基本的に、これにより、ユーザーはより Gmail に似たエクスペリエンスを得ることができます (ポータルには読み取り専用のエクスペリエンスのみが必要です)。私の問題は、IMAP アクセスが Atom フィードよりも大幅に遅いことです。比較すると、IMAP メソッドは約 10 秒かかりますが、Atom フィードは通常 2 秒以内に返されます。

Gmail のIMAP 拡張機能Gmail の高度な検索構文を認識しており、使用しています。

現在の方法:

IMAP 受信トレイから上位 40 のスレッドが必要だと想像してください。現在、任意の数のメッセージ (40 * 4) をダウンロードし、X-GM-THRIDのみを取得しています。受信トレイ メッセージのリストを使い果たすか、目標のスレッド数に達するまで、スレッド ID を格納するこれらのメッセージを反復処理します (必要に応じてさらにメッセージをフェッチします)。

次に、IMAP 検索を実行するために使用できる Gmail スレッド ID のリストを取得します (必要なメッセージの詳細に応じて、適切な FetchProfile.Item を使用します)。

検索結果を繰り返し処理して、次のようなものを生成します (すばらしいGoogle Guava/Google Collections Multimap を使用):

Multimap<Long, Message> threadMultiMap = LinkedListMultimap.create();

これは次のように簡単にマッサージできます。

LinkedHashMap<Long, Message[]> threadMap; 

X 個の異なるメッセージ スレッドが識別されるまで、INBOX を反復処理するよりも良い方法はありますか?

4

1 に答える 1

1

実際には答えではなく、関連する質問です。


マーク、あなたのapiリクエストに従って、私は答えとしてコメントを投稿しています(http://code.google.com/p/java-gmail-imap/wiki/DisplayingGmailThreadBasedView

あなたのライブラリは3本足のoauthをサポートしていますか?リポジトリのソースでXoauthAuthenticatorを探してみましたが、見つかりませんでした。

ありがとう


こんにちはアガレゴ、

XOAUTHでjava-gmail-imapを使用します。XOAUTHで動作するために変更を必要とするJavaMailには明示的に何もありません。

XOAUTHプロジェクト(google-mail-xoauth-toolsおよびgoogle-mail-xoauth-tool-java-two-legged)を見ると、Gmailに対する認証に使用できるSASLプロバイダーを作成できることがわかります。たとえば、XoauthAuthenticator.javaを参照してください。

これがお役に立てば幸いです。

マーク

于 2012-02-03T00:43:12.057 に答える