プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
メールの受信済みを判断する仕組み
結論から書けば、メーラー単位で受信済みメールのUIDLを保持することで、
最新のUIDL一覧との差分から判断してるっぽいです。

PHPでちょっくら受信メールの一覧を表示するプログラムを作っていたのですが、
後々のことを考えて、受信済みメール、未受信メールの判断を行いたくてですね。
あれやこれやと調べてみました。

まずはPOP3の仕様を調べて「既読フラグ」のようなものの存在を探したのですが見つからず。

ん(--?

「DELE」コマンドを実行すると削除フラグが立つので同じイメージでいましたが、
よく考えたら受信済みかどうかってメーラー単位で管理されていましたね(--ゞ
メールサーバ側の情報を見ても載ってるわけないじゃん。

そこで今度はメーラー側の情報をあれやこれやと集めた結果、
どうやらUIDLを元に判断してるっぽいことが分かりました。

ちなみにUIDLってのはメールに振られるユニークなIDね。
Message-IDと似たようなものですが「UIDL」というコマンドを実行することで
さくっと一覧が取得できるので便利です。

そうです。
「UIDL」というコマンドを実行することでさくっと一覧が取得できるのです。

だからメールを受信するときは「UIDL」コマンドを実行して、
さくっとサーバ上にあるメールのUIDL一覧を取得します。

あとは前回UIDLコマンドを実行した結果との差分を未受信メールと判断して、
その分のメールだけを受信します。

流れとしては

1.メールサーバ上でUIDLコマンドを実行してUIDL一覧を取得
2.ローカルに保存してあるUIDL一覧と比較
3.差分を未受信メールとして受信
4.ローカルに保存してあるUIDL一覧を今回取得した一覧で更新

ですね。
前回の状態を覚えておいて、差分を未受信メールとして受信するようです。

試しに私が使っているメーラーでそれっぽい部分を消してみたところ、
同じメールを再受信しました。なるほどねー。

また一つ賢くなってしまった(--)☆
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● ネットワーク関連  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事