蝸牛の歩み

蝸牛の如く,ゆっくりでも着実に前へ・・・

POP3のLASTコマンドについて

先日のMacOSX Server 10.4 のメールをYahoo!メールで読めない - 蝸牛の歩みについてだが、調べてみるとLASTコマンドというのはhiroさんのコメントにあるようにもはやobsoleteなものらしい。

POP (Post Office Protocol) は、メールリーダーがサーバーからメールを取得するために用いられる。それは年数が経っており、いくつかのバージョンがある。古いバージョンのプロトコルでは、LASTコマンドが存在した。クライアントがLASTコマンドを送ると、サーバーはメールボックスの中の既に読まれた最後のメールの番号を回答する。

1994年11月、LASTコマンドは規格から削除されたが、いくつかのPOPサーバーは未だにそれをサポートしている。そしてまだそれを必要とするクライアントもあります。 このことは混乱を引き起こしてきた。そして、多くの人々がLASTコマンドの復活を再三求める。
しかし、LASTコマンドが廃止されたいくつかの十分な理由があります: 一つには、LASTコマンドは、サーバーにとってメールの既読と未読を保存しておく唯一の理由です。しかし、ほとんどのサーバはいずれにしてもこれを行うので、これ単独では重要な問題ではありません。より問題が多いのは、LASTコマンドにおける実際の意味です: LASTコマンドはメッセージがいつも整然とした状態で、つまり最も小さな数から最も大きい数まで、読まれるという考えに基づいています。しかし、普通はそうなのですが、いつも必ずそうであるというわけではありません。クライアントが、好きな順番でメッセージを読むと決めることができ、さらにいくつかのメッセージを読むだけであるか、いくつかを読まれていない状態でおくか、またはそれらを削除すると決めることさえできます。これは、LASTコマンドが本当に正確であるはずがないことを意味します。メールボックスの中にいくつかのメールがあり、いくつかは既読でいくつかが未読で、それらが全て一緒に混ざっていたとしたら、どれを報告しますか?

したがって、それはなくなりました。代わりに、現在はUIDLメカニズムが、メールの既読、未読を保存しておくのに使われています: あらゆるメールには、このメールがPOPメールボックスの中にある限り、決して変化しないUnique IDがあります。クライアントは、読んだすべてのIDを保存しておいて、どのメールが既読かを判断するのです。

UIDLによる方法の問題点は1つのクライアントでしか有効でないということです。メールボックスを読むのに複数のクライアントを使用するなら、それらは互いに他方のクライアントでどのメールが読まれたかを知りません。これは特に家と職場の両方から、あるいは旅先でノートパソコンから同じメールボックスを読んでいる人々のための問題です。

それには本当に1つの解決策しかありません: IMAPプロトコルへの切り替えです。 IMAPはPOPよりはるかに強力(で、はるかに重い)で、サーバ上の既読メールの状態を保存します。IMAPはメールをサーバーに保管して、メールを読みたいときには常にサーバにアクセスするという考えに基づいています。他方では、POPはサーバにすべてのメールを求めて、ローカルのメールフォルダにそれをコピーして、次に、サーバでそれを削除するという考えに基づいています。

LASTコマンドの歴史

それでも、LASTコマンドは1993年6月からの RFC1460の草稿規格の一部でした。 1994年11月に RFC1725でそれを取り除きました。 現在のPOP3規格(RFC1939)では、それについて言及しさえしません。

http://www.remote.org/jochen/mail/info/pop3-last.html私訳(エキサイト翻訳を修正)

RFCから取り除かれて10年以上経過しているにもかかわらず、Yahoo!メールはそれを使って新着管理をしようとしているというわけですね。
ついでに、サーバを再起動したら既読メールが送られてくるというのは、UIDLが初期化されてしまうということなんでしょうか?二重に送られてきたメールのUIDLを調べてみて(ってMacWindowsのメールソフトはUIDLをユーザから隠しているかもしれない)、それでもわからなければパケットキャプチャしてみましょうか。