Mail(gem) で送信するメールの本文を UTF-8 ではなく ISO-2022-JP にする方法
メモ。
Gem の Mailライブラリ(mail | RubyGems.org | your community gem host)で素朴に日本語のメールを送る場合、文字コードはISO-2022-JPではなく、UTF-8になります(Rails3で送信するメールの本文をbase64ではなく8bitにする方法 - 思っているよりもずっとずっと人生は短い。)。
ISO-2022-JP で送るようにするには、Mail::Message で charset を設定してやればいいみたい
mail = Mail.new <メールアドレスとか題名とかの設定> mail.body = NKF.nkf '-j', <日本語の本文> mail.charset = 'ISO-2022-JP' mail.deliver
ただ、このままだと添付ファイルを付けたりしたときにおかしくなります。mail.charset はメール全体のコード設定で、先に設定しておいた本文テキストから作られる本文パートのコード設定はまた UTF-8 になるからです(本文テキストに日本語入ってなかったら無設定になるかも)。
本文パートの文字コード設定もすればいいみたい
mail = Mail.new <メールアドレスとか題名とかの設定> mail.body = NKF.nkf '-j', <日本語の本文> mail.add_file <添付ファイルのパス名> mail.parts[0].charset = 'ISO-2022-JP' mail.deliver
Mail::Message#parts配列の中での本文パートの位置は本文テキストの代入とファイル添付の順番に依存するので注意すること。
本文パート、 Mail::Message#attachmennts からは取れなかったのでちょっと(随分)悩んだ。
(翌日追記、「(mail.parts - mail.attachments)[0]」とすれば順番関係なく本文パート取れる)
添付ファイルパートの charset設定とか、全体の charset設定とかも注意した方が良いかも知れない。
あと、日本語の題名(サブジェクト)は取敢えずこうしてるけどなんかもうちょっとないのかな
mail.subject = NKF.nkf '-M', <日本語交じりの題名>
(翌日追記)
バージョンは ruby 1.8.7, mail (2.2.11) になります。