2008年4月22日火曜日

Rails メール送信(2)

前回のメール送信の続きです。

ネットで拾ったサンプルコードに『波ダッシュ化け』の対応を追加しました。
元コードを変更したので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::BaseJpMailerに変更します。

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()

0 件のコメント: