未読管理

POP3アカウントでサーバ上のメッセージを削除しないように設定した場合、同じメッセージを何度もダウンロードしないようにするために以下のように未読管理を行います。

まず、POP3サーバがUIDLコマンドをサポートしている必要があります。UIDLコマンドはほぼ全てのPOP3サーバでサポートされています。

QMAIL3は、UIDLコマンドを使用して現在サーバ上にあるUIDのリストを取得し、uidl.xmlというファイルに保存します。次にサーバからメッセージをダウンロードするときには、以下のようにしてダウンロードするメッセージを決定します。

  1. 前回最後にダウンロードしたメッセージのサーバ上のIDが変わっていなければその次のIDのメッセージからダウンロードします
  2. 変わっていた場合には、サーバ上にある全てのメッセージのUIDを取得し、前回ダウンロードしなかった最初のUIDが現れたところからダウンロードします。

たとえば、一回目にIDとUIDの組み合わせが、1:A, 2:B, 3:C, 4:Dだったとします。二回目に1:A, 2:B, 3:C, 4:D, 5:Eだった場合には5番目のメッセージだけを取得します。三回目に1:D, 2:E, 3:F, 4:Gだった場合には、3番目のメッセージからダウンロードします。

ただし、POP3サーバによっては接続するときにIDの順番が変わってしまうものがあります。たとえば、一回目が、1:A, 2:B, 3:C, 4:Dで、二回目が1:A, 2:C, 3:B, 4:D, 5:Eになることがあります。この場合、上記の通りに扱うと3番目以降を取得してしまいます(2番目にCが現れた時点でBは削除されたと判断するため)。この問題に対処するために、UIDのチェックをするときには、異なるUIDが現れた前後に目的のUIDがある場合にはそのメッセージは飛ばすようにしてあります。その結果、上の例では5番目以降を取得します。

POP3サーバによってはこの方法でもうまくいかないほどUIDの順番が変わってしまうことがあります。この場合には、POP3の設定で[重複するUIDは強制的に無視]のチェックを入れると、既にダウンロードしてあるUIDを持つメッセージはダウンロードされなくなります。

ただし、サーバによっては、時として異なるメッセージにもかかわらずUIDが同じになるケースがあり、その場合に上記のオプションを適用すると最初のメッセージしか取得できなくなってしまいます。このため、特に問題がない場合には上記のオプションは設定しないことをお勧めします。