▼ 既読・未読の管理とUID機能の解説
一般的に使われているPOPプロトコルには、既読・未読の管理機能はありません。
一般的にメーラー*1は、そのソフトウエア*2で独自に既読・未読管理を行っています。
これは、「受信サーバーが付けたメール番号」です。
その形式は様々です。
例)
このUIDは、セッション(プロセス)が異なっても、その受信サーバー内では一意に保たれているのが通常です*3。
UIDは、QdmailReceiverの場合、「popuid」という名称のヘッダー情報として格納します*4。
これをデータベースなり、ファイル、セッション変数等に格納することで、既読・未読の管理をすることができるでしょう。
これは、メールを受信順に1から番号付けしてくれるものですが、しかし、これは当該セッション(プロセス)内だけで有効なものです。
メールの取得や削除には、Pointer Numberを使いますが、そのPOPプロセス内*6だけ、ということは意識しておいてください。
一般的にメーラー*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の変換ができます。
*1 : OutlookExpressをはじめBecky!や秀丸メール、その他ほとんどすべてのメーラー
*2 : クライアント
*3 : メッセージ本文が全く同じ場合は、同じUIDになってしまうサーバーもあることはあるようだ。POPのプロトコル上は、メッセージが同じであれば同じUIDを返すことになっているけれども、多くのサーバーはそれを拡張し、同じメッセージであっても異なるUIDを返す場合が多いと思う
*4 : UIDをサポートしないサーバーのため、格納しないように設定することもできる。
*5 : 又は、qd_receive_mail('pointer', ...
*6 : サーバーやPHPのプロセスではなく、POPのプロセス
*7 : お目にかかったことはないけれど。一応この機能はPOP3プロトコルのオプション扱い
- TB-URL http://hal456.net/qdmail_rec/07/tb/
# すいません。 2012年09月19日(水) 深夜4時51分
もう開発されてないようなのですが、お伺いしたい事があります。
ポインターの操作でuidToPointerという記述がありますが、
呼び出してみると、
PHP Fatal error: Call to undefined method QdPop::uidToPointer()
と言われます。
バージョンは0.1.4.alphaです。
何か分かれば教えて頂きたいのですが。。