Create  Edit  Diff  FrontPage  Index  Search  Changes  History  Source  RSS  Note  wikifarm  Login

Rails' Wiki - ActionMailer Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

ActionMailer は青木さんの TMail のラッパーとして作られています。
なので、TMail を理解することが ActionMailer を理解することの近道になるでしょう。

[[TMail|http://www.loveruby.net/ja/prog/tmail.html]]

しかし 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 と同様。
* Receiving emails - 受信メールの解析に ActionMailer::Base が使えるようになりました。ActionMailer の README 参照。

!Action Mailer - Easy email delivery and testing
!!Dependencies
!!Bundled software
!!Download
!!Installation
!!License
!!Support
!ActionMailer::Base
!!Configuration options