1

私はちょうどこれを正確に行うことになっているのだろうかと思います:

FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.SEEN), false);
Message messages[] = imap.folder_.search(ft);
int nbTotalUnreadMessages = messages.length;
// make a loop over the messsages to make some procedure

VS:

Message[] messages = imap.folder_.getMessages();
for (int i = 0; i < messages.length; i++) {
    Message msg = messages[i];
    Flags flags = msg.getFlags();
    if ( flags.contains(Flags.Flag.SEEN) )
        continue;
    // proceed on the unseen message
}

最初のバージョンは高速で点灯し、正常に機能します。2番目のバージョンは1/遅い2/動作しません。フォルダ全体を解析するため低速であり、ドキュメントに記載されているように、メッセージを自動的に取得する唯一の事実はメッセージが表示されたと想定するため、機能しません。

では、最初のバージョンは内部で何をすることになっているのでしょうか。好奇心がないのですが…メッセージ自体を取得せずにメッセージのフラグを取得することは可能ですか?

4

1 に答える 1

1

サーバーがすべてのメッセージを検索し、1 回の操作で回答を返すため、最初のバージョンは高速です。

2 番目のバージョンは、各メッセージについてサーバーに問い合わせる必要があるため、処理が遅くなります。2 番目のバージョンでは、最初のバージョンと同じ結果が得られるはずです。そうでない場合は、最初のケースで返されたものと 2 番目のケースで返されたものの違いを示すプロトコル トレースなどの詳細が必要です。

于 2013-01-25T01:04:12.590 に答える