あおきです。

  In Mail "[ruby-list:15222] Re: mail library"
    kikutani / sprintmail.com wrote:

> POP3clientでsizeでバイトが返りますが、bodyの行数を返してくれる
> linesかなんかがあると嬉しいです。Lines: 付けてこないやつも
> 多いので。

メールのサイズは最初にリストをとってくるとくっついてきてるだけで、
それを知ることができるPOPコマンドはありません。つまり、bodyの行数を
返すコマンドもありません。ということは、これを実装するためには
一度メール全部を持ってきて、行数を数えないといけないわけです。


> それから、headerでヘッダだけ返すメソッドがあるので、
> bodyとかいうメソッドで、ボディ部だけ返すのがほしいです。

これも同様に、ヘッダはTOPコマンドでとってこれますが、ボディをとって
くるコマンドはないので、やはりメールをもってきてボディだけとりだして
返すということになります。

あくまでinetcはプロトコルのクラスですから、メール自体に関する
情報にしても「持ってくるときに役にたつ情報」を提供するべきで、
持ってきたあとにいろいろやるのはinetcの責任ではないと思うんです。
ですから、どちらもあまり追加したくはないです。

ただ(なんらかの事情があって)どうしても欲しいということであれば、
次のようにPOPmailを追加定義すればとりあえず目的ははたせます。

# このへんがRubyのすごいところですね

class POP3client
  class POPmail
    def body
      str = self.mail
      beg = str.index( "\r\n\r\n" ).to_s + 4
      return str[ beg, str.size - beg ].to_s   # @body = ... ;
    end

    def lines
      cnt = 0
      self.body.scan( /\r\n/o ){|s| cnt += 1 }
      return cnt
    end
  end
end


> さて、いつのまにinetc-1.2.0が出てますが、
> 「dispatchがねいっ」って言われてます。これは何処?

あああ、すみません。またも入れわすれました。
たしかめたはずなのになぜ…


# じきにinetcは例のメールライブラリを使って実装するようにします。
-------------------------------------------------------------------
あおきみねろう     site: http://www1.u-netsurf.ne.jp/~brew/mine/jp/