From: Minero Aoki Date: 2003-04-29T18:36:51+09:00 Subject: [ruby-list:37634] Re: net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド 青木です。 In mail "[ruby-list:37627] Re: net/pop.rbにUIDLコマンドでMessage-Idのリストを取得するメソッド" Minero Aoki wrote: > > > 実は 1.8 では既に POP3#uidl と POPMail#uidl が実装されています。 > > > どうも、UIDLコマンドでは、1つのメールの情報を取る機能しかないようです。 > > あっと、すみません。実装したような気がしてたんですが、 > ないですね。追加しときます。 と思ったんですが考えなおしました。三並さんの実装だと POP3#list_mid は UID の配列 (そのインデックスはメール番号) を返しますが、これでは二つの点でまずいように思います。 * 返り値の形式が使いにくい (nilが混じる可能性が高い) * 必ずしも通信量が最小にならない 二点目に関して説明します。 たとえば、UID リストを見てまだ読んでいないメールだけを ダウンロードする場合をシミュレートしてみます。 1. POP3#list_uid でリストを得る 2. 手持ちの既読 UID リストにあるものを削る 3. 残ったリストにある UID を持つメールをダウンロード この場合、3. で文字列の UID と POPMail オブジェクトの対応を 取る必要があるので、ここで POPMail#uidl が使いたくなります。 しかしそうすると結局ここでダウンロードするメールの数だけ UIDL コマンドを発行することになり、わざわざ POP3#list_mid を使った 意味がなくなってしまいます。 つまり、(通信量を削減するという目的のためには、) * 一度でも UIDL を引数なしで呼んだら UIDL コマンドは 二度と発行してはならない はずです。 で、長くなりましたが、まず POP3#list_mid が欲しくなった 理由をお聞きたいのです。それによって実装を変えようと思います。 ------------------------------------------------------------------- 青木峰郎