既読・未読の管理とUID機能の解説
2008/05/08
一般的にメーラー*1は、そのソフトウエア*2で独自に既読・未読管理を行っています。
QdmailReceiverで既読・未読管理を行うには?
POPサーバーの多くは、UIDという機能を有しています。これは、「受信サーバーが付けたメール番号」です。
その形式は様々です。
例)
プロバイダorレンタルサーバー名 | UIDの形式 |
so-net | 数字5桁 |
ドリームネット | 数字n桁.数字n桁.サーバーNumber? |
ロリポップ | 数字n桁.数字n桁.サーバーNumber.lolipop.jp |
さくらインターネット | UID数字n桁-数字n桁 |
このUIDは、セッション(プロセス)が異なっても、その受信サーバー内では一意に保たれているのが通常です*3。
UIDは、QdmailReceiverの場合、「popuid」という名称のヘッダー情報として格納します*4。
これをデータベースなり、ファイル、セッション変数等に格納することで、既読・未読の管理をすることができるでしょう。
Pointer number は既読・未読管理に不向き
QdmailReceiver (及びPOPの仕様)では$receiver->pointer();*5)機能で、メールの番号付けを行います。これは、メールを受信順に1から番号付けしてくれるものですが、しかし、これは当該セッション(プロセス)内だけで有効なものです。
メールの取得や削除には、Pointer Numberを使いますが、そのPOPプロセス内*6だけ、ということは意識しておいてください。
継続性 | 範囲 | サポート | |
PointerNumber | POPプロセス内 | そのサーバー内だけ | どのPOPサーバーもOK |
UID(popuid) | 削除するまでは 一意に保たれる | そのサーバー内だけ | たまにサポートしてない サーバーもあるようだ*7 |
UIDとPointerNumberの変換
UID → PointerNumber(ポインタは移動しません。)
$receiver -> uidToPointer( uid ); または、 qd_receive_mail( 'uidToPointer' , uid );
PointerNumber → UID (ポインタが移動するので注意してください。)
$receiver -> pointer( PointerNumber ); $receiver -> header( 'popuid' ); または、 qd_receive_mail( 'pointer' , PointerNumber ); qd_receive_mail( 'popuid' );とすることで、UIDとPOINTERの変換ができます。