From f35962afde0bac1ba1e7fd5d80c28400f695bc7b Mon Sep 17 00:00:00 2001 From: Zhang Yuanyi Date: Tue, 30 Mar 2010 00:21:02 +0800 Subject: [PATCH] move quote fields to mail --- actionmailer/lib/action_mailer/base.rb | 20 ++++++++++---------- actionmailer/lib/action_mailer/old_api.rb | 10 ++++++++++ actionmailer/test/base_test.rb | 5 +++++ 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 793cd53..bacc9e8 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -529,9 +529,9 @@ module ActionMailer #:nodoc: headers = headers.reverse_merge(self.class.default) charset = headers.delete(:charset) - # Quote fields + # set fields headers[:subject] ||= default_i18n_subject - quote_fields!(headers, charset) + set_fields!(headers, charset) # Render the templates and blocks responses, explicit_order = collect_responses_and_parts_order(headers, &block) @@ -577,15 +577,15 @@ module ActionMailer #:nodoc: I18n.t(:subject, :scope => [:actionmailer, mailer_scope, action_name], :default => action_name.humanize) end - # TODO: Move this into Mail - def quote_fields!(headers, charset) #:nodoc: + # Field quoting moved into Mail + def set_fields!(headers, charset) #:nodoc: m = @_message - m.subject ||= quote_if_necessary(headers.delete(:subject), charset) if headers[:subject] - m.to ||= quote_address_if_necessary(headers.delete(:to), charset) if headers[:to] - m.from ||= quote_address_if_necessary(headers.delete(:from), charset) if headers[:from] - m.cc ||= quote_address_if_necessary(headers.delete(:cc), charset) if headers[:cc] - m.bcc ||= quote_address_if_necessary(headers.delete(:bcc), charset) if headers[:bcc] - m.reply_to ||= quote_address_if_necessary(headers.delete(:reply_to), charset) if headers[:reply_to] + m.subject ||= headers.delete(:subject) if headers[:subject] + m.to ||= headers.delete(:to) if headers[:to] + m.from ||= headers.delete(:from) if headers[:from] + m.cc ||= headers.delete(:cc) if headers[:cc] + m.bcc ||= headers.delete(:bcc) if headers[:bcc] + m.reply_to ||= headers.delete(:reply_to) if headers[:reply_to] end def collect_responses_and_parts_order(headers) #:nodoc: diff --git a/actionmailer/lib/action_mailer/old_api.rb b/actionmailer/lib/action_mailer/old_api.rb index 7c59a8a..1863bfd 100644 --- a/actionmailer/lib/action_mailer/old_api.rb +++ b/actionmailer/lib/action_mailer/old_api.rb @@ -243,5 +243,15 @@ module ActionMailer [ctype, {"charset" => @charset}.merge(attrs)] end end + + def quote_fields!(headers, charset) #:nodoc: + m = @_message + m.subject ||= quote_if_necessary(headers.delete(:subject), charset) if headers[:subject] + m.to ||= quote_address_if_necessary(headers.delete(:to), charset) if headers[:to] + m.from ||= quote_address_if_necessary(headers.delete(:from), charset) if headers[:from] + m.cc ||= quote_address_if_necessary(headers.delete(:cc), charset) if headers[:cc] + m.bcc ||= quote_address_if_necessary(headers.delete(:bcc), charset) if headers[:bcc] + m.reply_to ||= quote_address_if_necessary(headers.delete(:reply_to), charset) if headers[:reply_to] + end end end diff --git a/actionmailer/test/base_test.rb b/actionmailer/test/base_test.rb index baeee54..67fd379 100644 --- a/actionmailer/test/base_test.rb +++ b/actionmailer/test/base_test.rb @@ -125,6 +125,11 @@ class BaseTest < ActiveSupport::TestCase assert_equal(['jose@test.plataformatec.com'], email.from) assert_equal('The first email on new API!', email.subject) end + + test "mail() should not quote header fields" do + email = BaseMailer.welcome(:subject => 'Test email with multibyte chars: \303\246') + assert_equal("Test email with multibyte chars: \303\246", email.subject) + end test "mail() with from overwrites the class level default" do email = BaseMailer.welcome(:from => 'someone@example.com', -- 1.6.0