前回のメール送信の続きです。
ネットで拾ったサンプルコードに『波ダッシュ化け』の対応を追加しました。
元コードを変更したのでjp_mailer.rbというファイル名に変更してあります。
ファイル名:#{RAILS_ROOT}/lib/jp_mailer.rb
説明:メールのエンコード・デコード処理
require 'nkf'
class JpMailer < ActionMailer::Base
# MIME Encode
def self.mime_encode(str_utf8)
str_iso2022jp = NKF.nkf("-W -j -m0 --cp932'", str_utf8)
str_base64 = [str_iso2022jp].pack('m').chomp
"=?iso-2022-jp?B?#{str_base64}?="
end
# MIME Decode
def self.mime_decode(str_mime)
NKF.nkf('-J -m --utf8',str_mime)
end
# bodyをiso-2022-jpへ変換
def create!(*)
super
@mail.body = NKF.nkf("-W -j --cp932'", @mail.body)
return @mail
end
end
次に、Generatorを使ってモデル名・ビュー名をmailでMailerを生成しました。
以下のファイルが生成されます。
create app/models/mail.rb
create app/views/mail/mail.rhtml
create test/fixtures/mail/mail
create test/unit/mail_test.rb
それぞれのファイルの内容は以下の通りです。
ファイル名:#{RAILS_ROOT}app/views/mail/mail.rhtml
概要説明:送信メールのテンプレートです。下記のモデル内メソッド名def mail()と同名で作成します。
---------------------------------
受付時刻: <%= @now %>
件 名: <%= @subject %>
---------------------------------
テストメール送信です。
ファイル名:#{RAILS_ROOT}/app/models/mail.rb
概要説明:メール送信に関する情報を設定しています。
継承元ActionMailer::BaseをJpMailerに変更します。
class Mail < JpMailer
def mail()
recipients "(TOメールアドレス)"
from "#{JpMailer.mime_encode('FROM送信者です')}<(Fromメールアドレス)>"
subject JpMailer.mime_encode("テストメ~ルです。")
body :now=>Time.now, :subject=>subject
end
end
最後に呼び出し方法ですが、コントローラーなどでメールを送信するタイミングで以下のメソッドをコールします。
Mail.deliver_mail()