新着メール取得時の疑問
カテゴリがよくわからないので一応softにしてみる。
Rubyでメールの仕組みを実験してみて、サーバーから取得してくるメールの順番って必ずしも届いた順になっていないことに気がつきました。メール単体につけられるunique-id(uid)も時系列で増加していく値ではないですね。
そうなるとメールソフトで新着のメールだけ取ってくるというのはどの様に実現されているのでしょうか? 取得済みのメールのuidを保持していて、サーバー上にあるメールのuidと比較しつつ取ってくるという方法が巻が考えられますが、それだと取得済みのメールのuidは何時まで保持していれば良いの?という問題が生じます。サーバーにメールを残す設定の場合に、取得済みメールのuidを削除してしまうと二重取得になってしまいますよね。
このあたり良くわかりません。
追記
取得するメールの順番について、法則性があるようです。
実験しているサーバー(yahoo)では迷惑メールの設定をしていないのでジャンクメールも受信します。このジャンクメールがクセモノのようですね。メールを取得する順番として、マトモなメール群(到着順)→ジャンクメール群(到着順)といった具合になっているようですね。ジャンクメールのヘッダーに何かあるのだろうか?
更に(以下略
おかしいなぁ、Message-ID:有りと無しで送信してみると、どれもマトモなメール郡の中で到着順に取得されますね。ますますわからなくなりました。ちなみにYahooのお知らせメールもマトモなメール郡でした(先ほどはグループの最期に位置していたのでわからなかった)
他のサーバー経由でMessage-IDなしのメールを送ると勝手に付加されるみたい。先ほどの実験はYahooから自分宛に送ったものなのでyahoo内で処理されるメールにはMessage-IDが付かないってことなのだろうか。それにしても同じようにMessage-IDが無いお知らせメールとジャンクメールでグループが異なるのはわかりませんけれども。。。
結局のところMessage-IDがないメールは無視してしまって良いのかなぁ。それなら処理が簡単になりますね。
結論というか
ザウルスの標準メールの設定ファイルをみたら、サーバーに溜まっているメール分のuidとサイズが保存されていました。動作をみると以降取得時にサーバーが空になるまでこのデータを保持しているようです(もしかしたらMax値があるのかもしれません)
結局この方法が一番確実ということですかね。標準メールで何千件もサーバーに溜めておくとどうなるんだろう??