質問

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

今、私は、スクリプトを持っている1上のフォルダを反復処理、FETCHがFLAGS:*何を読んで、以前に読んでメッセージが新規としてマークされている場合は、その後、私はドンメッセージのすべてにBODY.PEEKをFETCHされています表示するには「tは私のデータベースを持っています。より良い方法はありますか?

役に立ちましたか?

解決

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

他のIMAPクライアントは、アプリケーションに加えて、メールボックスにアクセスしていた場合は、

あなたの元のメソッドが正しく動作しません。あなたは新しいし、削除されたメッセージを確認するためにNOOPとIDLEを使用して、連続してIMAPサーバに接続を維持することができれば理論的には、[OK]を動作しますが、これは実際に可能になることはありません - でもGmailは100%の稼働時間を持っていません: - )

究極のIMAPクライアントは、これらのアプローチの両方を組み合わせることでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top