JpMailerプラグイン

これはなに?

ActionMailer:Baseのサブクラス。
日本語のPC用のメール及び携帯電話用のメールを送る際に便利かなぁというもの。

動作環境

  • Ruby 1.8.6
  • ActionMailer 2.0.x
  • gettext/railsと共存できません([http:/d.hatena.ne.jp/taslam/20080311/1205830007:itle=※対処法])

できること・やりたかったこと

  • @@default_charset等のクラス変数は変更しない。(他への影響を抑えるため)
  • ISO-2022-JPで送る。
  • 携帯電話のメールアドレスだったら(複数指定したときは先頭のアドレス)、各キャリアに適した文字コードで送る。(MIME Base64エンコードされます。)
  • 携帯電話のとき、携帯用テンプレートがあればそっちを使用。
  • JpmobileJpmobile:Emoticon)がインストールされてれば携帯電話用テンプレートで絵文字を使える。書式はJpmobileに準じる。
  • 携帯電話のみ、アドレスの書式チェックを簡易なものに。(携帯キャリアがRFC違反の変態アドレスを容認しているため)
  • 携帯電話のとき、全角カタカナ→半角カタカナ変換。
  • Willcomは僕が使えない地域在住なので無視。

インストール

script/plugin install http:/taslam-plugins.googlecode.com/svn/trunk/jp_mailer/

使い方

モデル

app/models/user_notify.rb

# JpMailer:Baseを継承するほかはかわりません。
class UserNotify < JpMailer::Base

  def signup(user,password,verify_url)
    @recipients = "#{user.name} <#{user.email}>"
    @from       = 'たすらむ <taslam@example.com>'
    @sent_on    = Time.now
    # 件名には絵文字も使えます。
    # ただし携帯だとわかってるときだけか、自前で判別してから付けるべき。
    @subject = "ユーザ登録確認"
    @body["userid"] = user.userid
    @body["password"] = password
    @body["url"] = verify_url
  end

end
ビュー(テンプレート)

PC用
app/views/user_notify/signup.erb

ユーザ仮登録完了のお知らせです。
下記URLより、登録処理を完了してください。
<%= @url %>

登録内容
【ユーザID 】<%= @userid %>
【パスワード】<%= @password %>
※この情報は他者に見せないように、厳重に保管してください。

携帯メール用
※なかったらPC用を使う。
app/views/user_notify/mobile/signup.erb

ユーザ仮登録できたよ&#xE6FA;
下記URLから登録処理を続けてね&#xE6F0;
<%= @url %>

登録内容
【ユーザID 】<%= @userid %>
【パスワード】<%= @password %>
※この情報は他者に見せないように、厳重に保管してね。

注意

  • いきあたりばったりで作ったのでいろいろ危ないところがありそう。
  • 自分ではDoCoMoしかテストできないので、AUSoftbankは要注意。
  • 無保証。自己責任でどうぞ。

参考にさせていただいたところ

[http:/jpmobile-rails.org/:title=jpmobile] jpmobileにはいつもお世話になってます。
[http:/wota.jp/ac/?date=20050731:title=ヽ( ・∀・)ノくまくまー Iso2022jpMailer] はじめて買ったRails本はこの方の著書。舞波乙!
[http:/d.hatena.ne.jp/urekat/20071030/1193728474:title=urekatのスカンク日記3] いいかげんな携帯のメールアドレスを無理矢理なんとかパースするぜ] あいまいパーサのコードを流用させていただきました。

追記 2008.07.15

文字コードの判定に失敗するとき、メールの件名が文字化けしていた不具合を修正しました。

追記 2008.07.30

Rails 2.1(TMail 1.2.3)に対応したつもり。