TMail 携帯メールアドレス問題

○なにが、問題なのか。
DoCoMoのメールアドレスは、RFC 2822 に準拠していないので TMail ではじかれる。
例)hoge..hoge.@docomo.ne.jp

なので、メールを受信して、Railsでいろいろやろうとしても、アドレスがおかしいと、TMailで弾いてしまう。


○現象を再現。ruby script/console でテスト

mail = TMail::Mail.new
mail.from = 'hoge..hoge.@docomo.ne.jp'
mail.from #=> nil

結果は、nil


○解決のヒント
http://i.loveruby.net/svn/public/tmail/trunk/ChangeLog

Sun Oct 29 13:05:34 2006  Minero Aoki  <aamine@loveruby.net>

	* lib/tmail/parser.y (dots): allow many dots for mobile phone
	  addresses.

○解決方法
つまり、最新のTMailにすればよい。

# svn checkout http://i.loveruby.net/svn/public/tmail/trunk/
# cd trunk
# ruby setup.rb config
# ruby setup.rb setup
# ruby setup.rb install

○確認

mail = TMail::Mail.new
mail.from = 'hoge..hoge.@docomo.ne.jp'
mail.from => ["hoge..hoge.@docomo.ne.jp"]

結果は、おk!


ふー。


※注意
しかし、ドットが3個連続(@マーク前はドット2個以上連続)するとエラーになってしまう・・・。うーむ。中途半端な対応ですね・・。
※注意2
Linux環境で最新のTMailにアップデートした場合に、

/usr/lib/ruby/site_ruby/1.8/i686-linux/tmail/base64.so

↑このファイルが出来ますが、TMailを使ったbase64エンコードがうまくいかない場合は、これを削除すると良いかもしれません。(携帯の添付画像取得等の際に使うと思います)

# rm /usr/lib/ruby/site_ruby/1.8/i686-linux/tmail/base64.so

※注意3

http://i.loveruby.net/svn/public/tmail/trunk/

↑のソースは古いものなので、

http://rubyforge.org/frs/?group_id=4512

↑こちらからダウンロードしたものを利用した方が良いと思われます。


※ためした環境
OS : CentOS4.5
Ruby : 1.8.6
Rails : 1.2.3