のうはう色々
メール送信のうはう
やりたいこと
- メールをiso2022jpで送信したい。
- 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の絡ませ方がわかる気がする
コメント
最終更新:2008年08月21日 18:44