0

複数の IMAP メールボックスにアクセスできる電子メール クライアントを作成したいと考えています。また、処理のためにすべてのメールのコピーをお願いします。IMAP コマンドを使用してこれを行う最善の方法は何ですか?

現在、フォルダーを反復処理するスクリプトがあり、1:* で FETCHing FLAGS を実行して、何が読み取られたかを確認し、以前に読み取ったメッセージが新しいものとしてマークされている場合は、持っていないすべてのメッセージで BODY.PEEK をフェッチします。私のデータベースで。より良い方法はありますか?

4

1 に答える 1

1

より良い方法は、すべてのメッセージのUID(UID FETCH 1:* FLAGS)をフェッチし、結果のUIDリストをデータベースと比較してから、持っていないメッセージをダウンロードし、持っているメッセージを削除することですが、サーバーはそうしません(たとえば、他のIMAPクライアントまたはWebインターフェイスを使用して削除されます)。これは、IMAPフォルダAFAIKを複製するための唯一の信頼できる方法です。(そして、UIDVALIDITYも考慮に入れることを忘れないでください!)

アプリケーションに加えて他のIMAPクライアントがメールボックスにアクセスしている場合、元の方法は正しく機能しません。理論的には、NOOPとIDLEを使用して新規および削除されたメッセージをチェックし、IMAPサーバーに継続的に接続できれば問題なく動作しますが、実際にはこれは不可能です。GMailの稼働時間は100%ではありません:-)

究極のIMAPクライアントは、これら両方のアプローチを組み合わせます。

于 2010-02-19T23:02:29.093 に答える