後でこれらのメッセージを複数のデバイス (モバイル、PC、ラップトップなど) 間で同期し、デバイスがメッセージを削除/コピーできるように、永続的な UID の機能を持つ IMAP インターフェイスを使用してメッセージ ストアを開発する必要があります。RFC 3501 は、UID がセッション内で一意であると述べています。
私の質問は、IMAP RFC でメールボックスの永続的な UID について話しているものはありますか?
すべての IMAP メッセージには、ユーザー固有の UID が割り当てられます。これは、2 人のユーザーが 2 つの異なるメッセージを受信しても、同じ UID が割り当てられる場合があるためです。[aka UID != UUID] ソフトウェアが単純なメッセージを発行している場合、サーバーはメッセージの UID を無視FETCH 1:* (FLAGS)
して連番のリストで応答します。特にメッセージの UID を処理したいコマンドは、 のように、適切に発行していることを確認する必要があります。FETCH UID 1:* (FLAGS)
例えば:
a1 fetch 1:* (flags)
* 1 FETCH (FLAGS (\Seen))
* 2 FETCH (FLAGS (\Seen))
* 3 FETCH (FLAGS (\Seen))
* 4 FETCH (FLAGS (\Seen))
* 5 FETCH (FLAGS (\Answered \Seen))
* 6 FETCH (FLAGS (\Seen))
* 7 FETCH (FLAGS (\Seen))
* 8 FETCH (FLAGS (\Seen))
* 9 FETCH (FLAGS (\Seen))
* 10 FETCH (FLAGS (\Seen))
対:
a8 uid fetch 1:* (flags)
* 1 FETCH (UID 1 FLAGS (\Seen))
* 2 FETCH (UID 2 FLAGS (\Seen))
* 3 FETCH (UID 3 FLAGS (\Seen))
* 4 FETCH (UID 4 FLAGS (\Seen))
* 5 FETCH (UID 5 FLAGS (\Answered \Seen))
* 6 FETCH (UID 6 FLAGS (\Seen))
* 7 FETCH (UID 8 FLAGS (\Seen))
* 8 FETCH (UID 9 FLAGS (\Seen))
* 9 FETCH (UID 10 FLAGS (\Seen))
* 10 FETCH (UID 11 FLAGS (\Seen))
とはいえ、複数のデバイス間で同期するために UID を個別に追跡する必要がある理由がわかりません。各デバイスが IMAP サーバーから情報を収集している限り、デフォルトで同期されます。基本的に、IMAP サーバーに既に存在する機能を再実装しています。
RFC3501で義務付けられているのは、UID がセッション内で一定である必要があるということです。これは、セッション間で永続的であってはならないという意味ではありません。反対に、永続的でない限り、IMAP クライアントは常にそれらをダウンロードする必要があります。
UIDVALIDITY
ここでRFC3501 の関連部分を数回読み直すことをお勧めします。これは IMAP メールボックス同期の重要な部分であり、これを正しく理解することがUIDNEXT
重要CONDSTORE
ですQRESYNC
。
また、UID がどのように割り当てられるか、および新しく到着したメッセージの UID がどのように見える必要があるかについて、かなり厳密な保証があることに注意してください。サーバーごとに一意の識別子を持つだけでは十分ではありません。