こんにちは。三並です。

RubyでPOP3を使うメールクライアントを書いていたのですが、
POP3のUIDLコマンドを使って、Message-Idのリストを、
取得したかったので、net/pop.rbを修正してみました。

修正点は、
- POP3#list_mid メソッドの追加
- POP3Command#uidl メソッドの修正
です。

UIDLコマンドを使って、Message-Idのリストを取得することの需要はあると思うので、
このライブラリの命名規則がわからなかったのでメソッド名は適当なのですが、
このようなメソッドを標準ライブラリに追加していただけないかと思います。

以下は1.6.8のnet/pop.rbで、diffを取った結果です。

では。

$ diff "F:\Program Files\Ruby\lib\ruby\1.6\net\pop.rb.orig" "F:\Program Files\Ruby\lib\ruby\1.6\net\pop.rb"
272a273,275
> : list_mid
>     an hash of number and message id.
>
326a330,332
> : uidl
>     return message id
>
439a446,449
>     def list_mid
>       command().uidl
>     end
>
572c582
<     def uidl( num )
---
>     def uidl( num = nil )
574c584,595
<           getok( sprintf('UIDL %d', num) ).msg.split(' ')[1]
---
>           if num
>             getok( sprintf('UIDL %d', num) ).msg.split(' ')[1]
>           else
>             arr = []
>             getok 'UIDL'
>             @socket.read_pendlist do |line|
>               m = /\A(\d+)[ \t]+(\S+)/.match(line) or
>                       raise BadResponse, "illegal response: #{line}"
>               arr[ m[1].to_i ] = m[2]
>             end
>             arr
>           end


 ___________________________
〆
|  三並 慶佐  (Keisuke Minami)
|  E-mail:keisuke / rccn.com
|  「do yourself better」
|
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄