[ruby-list:46482] TMailライブラリの例外的な?使い方

View: New views
2 Messages — Rating Filter:   Alert me  

[ruby-list:46482] TMailライブラリの例外的な?使い方

by Takayuki Suzuki :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

鈴木と申します。

TMailライブラリでFrom:のメールアドレスのlocal-partにピリオドが
3つ以上あるとfromメソッドの返値がnilになってしまいます。

RFCによるとピリオドの連続は許されないようにも読めるのですが、
現実的に送られてくるメールを処理したいので、ad hocなパッチで
もよいのでどなたかご教授願えないでしょうか。

% ruby --version
ruby 1.8.7 (2009-04-08 patchlevel 160) [i386-freebsd7.2]

TMailバージョン : 0.10.8

・取得に成功する例
pass.txt
-------------------------8<-------------------------
From: a..aaa@...
To: bbb@...
Subject: ssss^M
^M
^M
-------------------------8<-------------------------

irb(main):003:0> m=TMail::Mail.load('pass.txt')
=> #<TMail::Mail port=#<TMail::FilePort /tmp/pass.txt> bodyport=nil>
irb(main):004:0> m.from
=> ["a..aaa@..."]

・取得に失敗する例
fail.txt
-------------------------8<-------------------------
From: a...aaa@...
To: bbb@...
Subject: ssss^M
^M
^M
-------------------------8<-------------------------

irb(main):002:0> m=TMail::Mail.load('fail.txt')
=> #<TMail::Mail port=#<TMail::FilePort /tmp/fail.txt> bodyport=nil>
irb(main):003:0> m.from
=> nil

以上


[ruby-list:46483] Re: TMailライブラリの例外的な?使い方

by Takayuki Suzuki :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

自己レスです。

In message <20091022.193447.193749225.h-taka@...>
    on Thu, 22 Oct 2009 19:35:46 +0900
    Takayuki Suzuki <h-taka@...> writes:

> TMailライブラリでFrom:のメールアドレスのlocal-partにピリオドが
> 3つ以上あるとfromメソッドの返値がnilになってしまいます。
>
> RFCによるとピリオドの連続は許されないようにも読めるのですが、
> 現実的に送られてくるメールを処理したいので、ad hocなパッチで
> もよいのでどなたかご教授願えないでしょうか。

結局、HeaderFieldをクラス拡張してヘッダ文字列を取り出せる
ようにして対処することにしました。

module TMail
  class HeaderField
    def body_string
      @body
    end
  end
end

irb(main):009:0> TMail::Mail.load('fail.txt').header['from'].body_string
=> "a...aaa@...\r\n"

以上