TMailで携帯の変態アドレスを通す

ActionMailerで、って書いた方が受けがいい?


携帯では「o...rz.@docomo.co.jp」とかいうお茶目なアドレスが未だ有効だったりします。が、残念ながらTMail(0.10.7で確認)だと3つ以上連続するピリオドを持つアドレスは不正と判断されます。まぁ実際に不正なアドレスなんだけどさ。


できれば自分たちもマイクロソフトさんのように

http://help.jp.msn.com/announce.aspx#20061012
MSNおよびMicrosoftは、インターネット通信における相互接続性を維持するために技術的な根拠であるRFCへの準拠は必要な対応であると認識しており、準拠していないものに対する相互接続性は、その保証をすることができないため認めておりません。

と、キャリアに対して毅然とした対応を取りたいところなんですが、諸事情からそういうわけにも行きません。


しょうがないので対応しました。たった一行ソース弄るだけなのでみんなやればいいと思うよ。


lib/tmail/parser.y

#変更前
  dots      : '.'     { 0 }
            | '.' '.' { 1 }

#変更後
  dots      : '.'     { 0 }
            | dots '.' { val[0] + 1 }


変更したあとに

racc parser.y -E -o parser.rb

とかやって、生成されたparser.rbを今使ってるのと置き換えれば、ピリオドがいくつ連続してても大丈夫。

注意事項

  • raccが入ってなければhttp://i.loveruby.net/ja/projects/racc/からDL
  • RailsのActionMailerが使ってるTMailにはparser.yが付いてません。バージョンを確認してTMailを単体でDLすればparser.yが手に入ります
  • 元のparser.yは「敢えて二連続だけ通してる」様にも見えます。何か問題あっても責任は取れないので上記は自己責任でお願いします。(まず大丈夫だと思うけど)