1

IMAP クライアントがサーバーと同期していることを確認する方法の 1 つは、SEEN フラグを利用することです (例: Library for IMAP IDLE )。

私はまだこれを自分で使用していませんが、SEEN フラグを設定すると、基本的にメッセージがサーバー上で「読み取り」に設定されるかどうか疑問に思っていました。

もしそうなら、これは明らかに問題です。複数のリーダーが関与している場合、またはユーザーがサーバーに直接ログインし (たとえば、Gmail アカウントにログイン)、そこでメッセージを読んだ場合 (つまり、「既読のマーク」が付けられ、したがって、 - SEEN としてフラグが立てられます)。

または、これを完全に誤解している可能性があり、SEEN は特定のクライアントとサーバーの間で一意のものです。ただし、その場合の状態を維持する方法が明確ではありません。

4

1 に答える 1

2

「SEEN フラグを利用する」というのは、サーバーと同期するための悪い方法のように思えます。お察しのとおり、SEENフラグを設定すると、基本的にサーバー上でメッセージが「読み取り」に設定されます。他のすべての IMAP クライアントは、メッセージが読まれたことを認識します。フラグは、サーバーと各クライアントの間で「プライベート」ではありません。ユーザーがメッセージを見たことがない限り、クライアントはメッセージを SEEN とマークすべきではありません。

同期するには、クライアントが既に見たメッセージの UID を追跡し、フォルダをポーリングするたびにリストをサーバーで使用可能なリストと比較する必要があります。次に、サーバー上にないもの (他のクライアントから削除されたメッセージ) をローカルで破棄し、ローカル リストになかったもの (新しいメッセージ) をダウンロードします。

サーバーがすべてのメッセージの UID を忘れてしまった場合に対処し、新しい UID でフォルダーを再構築したい場合は、より複雑になります (インデックスが破損してサーバー上で再構築された場合、サーバー ソフトウェアが変更された場合に発生する可能性があります)。 、サーバーが別のホスティングプロバイダーになったなど...) しかし、それが基本的な考え方です。

于 2013-01-26T22:11:34.050 に答える