メールが化けたよ!
メールの文字化けなんて、もう卒業したと思っていた(nkf -jでおkでしょ?みたいな)んだが、本日またやってしまった。
いわゆるメールフォームで、そこから入力者への控え、管理者への控え、FAXサービスへと3通のメールが行くようになってるんだけど、今回は3つ目のFAXサービス(所定のメールアドレスに送信すると、同じ内容を任意の番号にFAXで送信してくれるサービス)で文字化けが発生した。なんのことはない、ISO-2022-JPエンコードのメールしか受け付けないサービスだったのだ。問題のメールはutf-8でエンコードされて送られていた。ちなみに数十通のうちこの一通だけ。
このFAXサービスもしょぼいが、何よりutf-8でエンコードされたメールを飛ばすのは本意ではなかったので原因を探る。
Ruby-GettextがActionMailerをいじっているらしいのでRuby-Gettextのソースを追うと、現在のロケールが"ja"のときのみ本文やサブジェクトをISO-2022-JP(決め打ち)に変換している。この部分のソースはhttp://wota.jp/ac/?date=20050731#p04に酷似していた。それはともかく、ロケールが"ja"以外だと失格、というシステムを作ってしまったことに変わりはないので、メール送信だけでもロケールを"ja"にしたい。
早い話が
class FormMailer < ActionMailer::Base set_locale "ja", true
ということです。第2引数は、「このクラスだけのロケールを指定する」場合trueにします。
しかしなんでGetText導入したんだっけかな…。無駄に機能を追加して、トラブルを誘発したよい例。いや、何か大事な理由があったはずだ。たしか、メッセージを1か所で管理できるとか…。あとこの辺留学生多いしね(後付け)!ていうか英語そんなにできねーよ俺!Rails のためのものぐさな Web アプリケーションの国際化手法 - 2nd lifeのように日本語をデフォにした方がちょうどいいのかしら。