ActionMailer
ActionMailer は青木さんの TMail のラッパーとして作られています。 なので、TMail を理解することが ActionMailer を理解することの近道になるでしょう。
しかし ActionMailer-1.8.0 以降、徐々に改悪されているような…--moriq
ActionMailer の default charset はUTF-8です。 @@default_charset や @charset を設定すると変更できます。 test では CHARSET で設定します。
@@encode_subject = true にすると Subject に quoted_printable が適用されます。今のところ (0.7.1) BASE64 はサポートされていません。ただし、TMail 側では $KCODE を見て iso-2022-jp BASE64 encode を行います。
iso-2022-jp BASE64
iso-2022-jp BASE64 でメールを作成するには次のようにすればよいでしょう。
module ActionMailer #:nodoc:
class Base
require 'nkf'
class << self
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
end
end
class Notifications < ActionMailer::Base
@@default_charset = "iso-2022-jp"
@@encode_subject = false
#...
end
test は次のようになります。
class NotificationsTest < Test::Unit::TestCase
CHARSET = "iso-2022-jp"
#...
private
def encode(subject)
ActionMailer::Base.base64(subject, CHARSET)
end
end
1.8.0 以降の変更点
- tmail/quoting.rb:
- TMail::Mail#body は body(to_charset='utf-8') と再定義され、header の charset から to_charset への convert を Iconv を用いて行います。元の body は quoted_body に alias されています。
- しかし、これは Base64, Quoted Printable のどちらも行わない場合に対応できていないように思う。--moriq
- TMail::Mail#subject も body と同様。
- TMail::Mail#body は body(to_charset='utf-8') と再定義され、header の charset から to_charset への convert を Iconv を用いて行います。元の body は quoted_body に alias されています。
- Receiving emails - 受信メールの解析に ActionMailer::Base が使えるようになりました。ActionMailer の README 参照。
Keyword(s):
References:[FrontPage]