2012-03-31 15 views
11

IMAPクライアントを実装していますが、IMAPメールボックス同期に問題があります。IMAP同期

まず、IMAPサーバーから新しいメールをフェッチすることはできますが、削除されたメッセージをメールボックスから見つける方法はわかりません。

サーバーからすべてのメッセージを取得し、ローカルデータと比較して同期する必要がありますか?

答えて

21

通常のアプローチは、フォルダごとに次の2つのコマンドを実行することである。

. EXAMINE "<foldername>" 
. FETCH 1:* (UID FLAGS) 

最初のコマンドは、フォルダは、このフォルダのUIDVALIDITY返し選択します。この値が以前に返されたUIDVALIDITYと一致する場合は、UIDに依存することができます。 2番目のコマンドは、選択したフォルダ内の各メールについて、UIDとすべてFLAGSを返します。

  • あなたはメールが追加または削除されたかを検出するためにUIDを使用する必要があります。 UIDも変更せずに電子メールの内容を変更することはできません。基本的なIMAPで
  • FLAGSは、電子メールのために変更することができる唯一の属性です。このフラグには、読んだメール(\Seen)と削除されたメール(\Deleted)に関する情報が含まれています。

このアプローチはほとんどのクライアントで使用されており、ほとんどのIMAPサーバーはこれらのサーバーに最適化されています。制限要因は、通常、クライアントとサーバー間の使用可能な帯域幅です。

次のような状況は少し複雑さ:UIDVALIDITYが一致しない場合は何をすべき

  • ? IMAP仕様では、この値を不必要に変更しないようにサーバーが最善を尽くすことを要求しています。
  • 移動したメール(実際にコピーされたメール)の最適化が必要ですか?基本的なIMAPでは、ソースフォルダ内の電子メールがまだ存在するかどうか、またはすでに削除されて消去されているかどうかにかかわらず、電子メールが別の電子メールのコピーであることは検出できません。
+1

UIDPLUS拡張機能は、移動/コピーされた電子メールに役立ちます。 削除されたメッセージを検出するもう1つの方法は、UID SEARCH: 'EXAMINE"フォルダ "' 'UID SEARCH 1:*'を使用することです。これにより、現在メールボックスにあるすべてのUIDの一覧が表示され、ローカルキャッシュと比較することができます。 – Max

関連する問題