Rails3で送信するメールの本文をbase64ではなく8bitにする方法
メモ。一つ謎が解けたので。
Rails3ではメールを扱うクラスがTMailからMailクラスに変わりました。そのせいか、素朴に日本語のメールを送る場合、文字コードはISO-2022-JPではなく、UTF-8になります。まあUTF-8になるのはいいとして、問題はこれがbase64なのでした。ううむ。
この辺りはMail::Messageクラスの挙動になるっぽいのですが、メール送信時にContent-Transfer-Encodingヘッダを指定することはできます。
# UserMailerクラスのメソッドの中の定義 mail(:to => email, :content_transfer_encoding => '8bit', :subject => I18n.t("hoge"))
ところが、ここで設定しても、実際に送信される時にはbase64になってしまうのでした。うう。
というわけで困ってたんですが、さっきspecを見たりしながら調べたら、どうもMail::Message#transport_encodingを8bitに設定すればよいようです。
一般的にメールを送信する場合、
UserMailer.foobar_email(@user).deliver
みたいな感じで送るところを、チェインをやめて、いったんmailに対してメソッドを適用させます。
mail = UserMailer.foobar_email(@user) mail.transport_encoding = "8bit" mail.deliver
こんな風にすればよさそうです。
あとはSubjectをQ EncodingじゃなくてB Encodingにする方法だな……。