RubyOnRailsで日本語メールを送信する

デフォルトはUTF-8のようです。UTF-8でもきちんと受信できるメーラーも多いですが、一番普及しているであろうMSOEが文字化けてしまうようなので、iso-2022-jpで送信する手法。もうUTF-8に統一しようよ。。。

今回はActionMaierとGetTextを利用。バージョンは以下。
Ruby 1.8.5
Rails 2.2.2
ActionMailer 2.2.2
GetText 1.93.0

まずはGetTextをインストール。これはgemで一発。

gem install gettext

メール送信するモデルは以下。ポイントはクラスの前にGetTextのインクルードと日本語であるという宣言。クラスの中で文字コードの宣言。これだけだとsubjectが残念な結果になったので、subjectは別途base64でエンコード。

require ‘gettext/rails’
GetText.locale = ‘ja’

class Hoge < ActionMailer::Base
  @@charset = ‘iso-2022-jp’

  def sendmail
    subject base64(‘ほげほげメール’)
    recipient 送り先
    from 送信者
    send_on 送信日時

  end

end

本文はerbファイルのテンプレート読み込みです。こっちに日本語が書かれています。送信はActionMailerでの通常の送り方のまま。これでGmail、Beckey!、MSOEでの受信には問題ありませんでした。

以前否定したRailsですが、最近多くの時間を割いています。理由は近いうちに説明、言い訳をしたいと思います。