1

私は imap アカウント (some@gmail.com など) を持っており、接続して宛先にメッセージを複製できる多くのライブラリを知っています。私は以下を達成したい、

  1. 初めて、すべてのメッセージ (送信済みフォルダーを含む) をダウンロードしたいのですが、初めてダウンロードするときに、メッセージを ID と UID とともにローカルのデータベースに保存します。
  2. 2 回目は、ダウンロードしたメッセージの既読/未読ステータス、フラグ、または削除済みフラグが変更されているか、削除されていても、クエリを実行したくありません。
  3. 私たちの目標は、すべてのメッセージをローカルにダウンロードして同期することです。

ID、UID、MessageID と呼ばれるものがあるという IMAP メッセージについて、私はほとんど知りません。ID はおそらく現在のフォルダーのオフセットであり、UID は現在のアカウントの数値 ID であり、MessageID は一意の文字列です。

ここで知りたいのは、フォルダーのクエリ中にどの検索を使用すればよいか、一度ダウンロードしたメッセージが返されないようにすることです。

http://mailsystem.codeplex.com/ライブラリを使用する予定です。これにより、カスタム文字列で検索して int 配列を返すことができます。

MaxID があり、MaxID より大きい ID または UID を持つメッセージのみをダウンロードしたいとします。どちらを使用する必要がありますか? UIDまたはID?

4

1 に答える 1

3

UIDVALIDITY と組み合わせて UID を使用する必要があります。どちらの値もフォルダ固有です。

IMAP クライアントが同期を行う方法を説明する情報 RFC があります ( RFC-4549、セクション 4.3)。テキストでは、次の 2 つのコマンドを発行することを推奨しています。

tag1 UID FETCH <lastseenuid+1>:* <descriptors>
tag2 UID FETCH 1:<lastseenuid> FLAGS

最初のコマンドは、すべての未知のメールに必要な情報を取得するために使用されます (メールの数は不明です)。2 番目のコマンドは、既に見たメールのフラグを同期するために使用されます。

私の知る限り、この方法は広く使用されています。したがって、多くの IMAP サーバーには、この情報を迅速に提供するための最適化が含まれています。通常、ネットワーク帯域幅が制限要因です。

于 2012-05-22T21:26:50.167 に答える