1

IMAP 経由で電子メール アドレスからすべての電子メールを取得するスクリプトを作成しています。

現在、すべてのフォルダー (メールボックス) をフェッチし、すべてのフォルダーから最高の (フェッチされた) UID を保存しているので、次に同期するときに最高の UID+1 でフェッチを開始します。しかし、1 つのフォルダーが削除され、誰かが同じ名前の新しいフォルダーを作成した場合はどうなるでしょうか。UID は単一のフォルダー用であり、リセットされます。

メールボックス (フォルダー) の一意の識別子を見つける方法が見つからないようです。

4

2 に答える 2

2

これはまさにそのためのものUIDVALIDITYです。これは、フォルダ名の具体化を識別する「Cookie」です。フォルダに入れると送られてきSELECTます。保存する必要があります。変更された場合は、そのフォルダーについて知っていることをすべて破棄します。

必要な場合は、詳細について RFC 3501 を参照してください。

于 2013-03-13T15:57:33.307 に答える
0

mail sizeにも対応した収納をお勧めしますuids。cient に格納されている最大 uid がサーバーから返されたものよりも大きい場合 (フォルダー削除の場合)、uid と対応するメール サイズを比較します。

それ自体からメールを取得するという考えには、UID+1非常に多くの欠陥があります....特定のメールのセットが、他のインターフェース(Web / pop)または他のクライアントを介してサーバーから削除された場合、どのように同期しますかそれはimapクライアントで??? そのためにコマンドを呼び出すと思いますuid fetch...そして、それを行っている場合は、クロス検証のためにuidとメールサイズを比較できます。

より良い結果を得るには、UIDVALIDITYまたの概念を使用できます。しかし、それを正しく使用していない imap サーバーをいくつか見たので、これにあまり頼ることはできません。

于 2013-03-14T06:20:47.263 に答える