6

受信トレイのメッセージにこれまでに含まれていたすべての人のリストを取得したいと思います。現在、javax mail APIを使用してIMAP経由で接続し、メッセージをダウンロードできます。

Folder folder = imapSslStore.getFolder("[Gmail]/All Mail");
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();

for(int i = 0; i < messages.length; i++) {
  // This causes the message to be lazily loaded and is slow
  String[] from = messages[i].getFrom();
}

行messages[i].getFrom()は、メッセージが遅延ロードされる原因となるため、私が望むよりも遅くなります。これをスピードアップするために私にできることはありますか?たとえば、メッセージを1つずつロードする代わりに、ある種の一括ロードを実行できますか?これはメッセージ全体をロードしますか?代わりにto / from / ccフィールドまたはヘッダーのみをロードするためにできることはありますか?POPはIMAPよりも高速ですか?

4

2 に答える 2

6

forループの前に以下を追加したい

FetchProfile fetchProfile = new FetchProfile();
fetchProfile.add(FetchProfile.Item.ENVELOPE);
folder.fetch(messages, fetchProfile);

これにより、from/to/subject/cc フィールドを含むすべてのメッセージの「封筒」がプリフェッチされます。

于 2012-10-17T00:25:44.197 に答える
5

Folder でfetchメソッドを使用できます。Javadocによると:

クライアントはこのメソッドを使用して、指定されたアイテムが指定されたメッセージ範囲にまとめて必要であることを示します。実装は、指定されたメッセージ範囲のこれらのアイテムを効率的な方法で取得することが期待されています。このメソッドは、目的のアイテムをプリフェッチするための実装へのヒントにすぎないことに注意してください。

FROM をフェッチする場合、適切な FetchProfile はENVELOPEです。もちろん、それはまだ実装次第であり、メールサーバーは本当に役に立ちます。

于 2012-04-24T04:38:36.033 に答える