のうはう色々


メール送信のうはう



やりたいこと

  1. メールをiso2022jpで送信したい。
  2. SenderID/SPFなどに対応するために各ヘッダーを変更したい。特にreturn-path


考え方と現状

  • 基本ActionMailerをベースにする
  • ActionMailerではメールボディの文字コード変換まではサポートされている。でもsubjectやfromに日本語が入ると化ける
  • ActionMailerを拡張したIso2022jpMailerというライブラリがActiveHeartプラグインに付属するが、subjectを変換してなれないなど、いま一歩感が残る。
  • プラグインなどで「これが一般的!」というのは無い? みんなIso2022jpMailerベースで必要なところだけ文字コード変換して使ってるのかな?
  • だとするなら、ActionMailerのdeliver*メソッドで必要部分だけNKFなどで変換すれば、別途プラグインを使う必要はないのでは? bodyの変換機能はデフォルトで付いてるし。
  • てかそれってDRYの原則に反してるよね。
  • 結局何がベスト?

config/environment.rbの最後に
ActionMailer::Base.sendmail_settings = {
 :location       => '/usr/sbin/sendmail',
 :arguments      => '-i -t -f from.mailaddress@example.com
}
ActionMailer::Base.delivery_method = :sendmail
#ActionMailer
::Base.delivery_method = :smtp
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.default_charset = 'iso-2022-jp'
を追加。sendmailの-fオプションで送信元メールアドレスとreturn-pathに使うアドレスを指定。

モデルはこんな感じ。コントローラーからdeliver_to_logined_user(object, user)で呼ぶ。
class Notifier < Iso2022jpMailer
 def to_logined_user( object, user )
   # Email header info MUST be added here
   recipients user.mail_address
   from  "from.address.for.header@example.com"
   # 必要なところでiso2022jp変換+base64エンコードする
   subject "[static message]" + base64("日本語にほんご") 
   # うまく使えないけど、ヘッダーに文字は入る
   # headers "¥r¥nReturn-Path" => "return-path.address.for.header@exapmle.com"
   # Email body substitutions go here
   body :object_for_view => object, :user_for_view => user
 end
 def base64(text, charset="iso-2022-jp", convert=true)
   if convert
     if charset == "iso-2022-jp"
       text = NKF.nkf('-j -m0', text)
     end
   end
   text = [text].pack('m').delete("\r\n")
   "=?#{charset}?B?#{text}?="
 end
end
このbase64メソッドを標準でどこかのプラグインに入れておけば良いのかなぁ。


日本語解説ページ


日本語処理のうはう



デプロイのうはう


※増井さんのスクリプト興味あるなぁ

Ajax系のうはう

ここらへん読むとRailsとjson-pの絡ませ方がわかる気がする

コメント

+ タグ編集
  • タグ:
  • actionmailer
  • deploy
  • メール
  • デプロイ
  • ノウハウ
  • のうはう
  • knowhow

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2008年08月21日 18:44