三並です。

> > もともとの理由は、POP上でIMAPのように、
> > uidを指定して、特定のメール情報だけを読み出したかったので、
> > POP3#list_midが欲しくなりました。
> 
> つまり、限定 RETR が目的なんですね。了解しました。

はい。その通りです。

> それならば、次のような感じに書けるほうがカッコいいと思うの
> ですがどうでしょう。
> 
>   def need_download?( id )
>     ....
>   end
> 
>   pop.mails.find_all {|mail| need_download?(mail.uidl) }.each do |mail|
>     mail_text = mail.pop
>     # いろいろする
>   end
> 
> 今でもこのコードは動くんですが、現在の実装だと UIDL コマンドの
> 無駄が多すぎるので使いづらいと思います。しかし UIDL が高々一回
> しか発行されないことが保証されれば気兼ねなく使えるはずです。

まさにその通りです。
一回似たようなことをやってみたら、とんでもなく重くて、
UIDLを引数無しで呼び出すことができればと思っていました。

ここまでnet/pop.rb側で処理してくれると至れり尽くせりですね。

ただ、net/pop.rbでいろいろとやってくれるのはいいのですが、
セッション内でどんなコマンドを発行したかを、
なんらかの手段で取得できるとうれしいですね。
#今まで、直接NICに流れるデータを見て確認していたので。

> 元の話に戻って POP3#list_mid ですが、この改造が終われば
> 
>   pop.mails.map {|m| m.uidl }
> 
> で済むことなので、今回はとりあえず見送ります。何か明らかに
> 便利な使い道を教えてもらえたらそのときに追加しましょう。

はい。見送りでいいと思います。

では。