aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer/lib
diff options
context:
space:
mode:
authorNate Berkopec <nate.berkopec@gmail.com>2012-10-27 14:28:42 -0400
committerNate Berkopec <nate.berkopec@gmail.com>2012-11-19 11:27:22 -0500
commit9cf33b55f39779b98604e1652affc2c64873dd9b (patch)
treeb9ae97ade41b07a17e8f52d8e1194e96ac3d13be /actionmailer/lib
parent3b99653587cead2f8b6ba4ee163c8b736d5f7f34 (diff)
downloadrails-9cf33b55f39779b98604e1652affc2c64873dd9b.tar.gz
rails-9cf33b55f39779b98604e1652affc2c64873dd9b.tar.bz2
rails-9cf33b55f39779b98604e1652affc2c64873dd9b.zip
Explicit multipart messages respect :parts_order
As issue #7978, the order in which ActionMailer sends multipart messages could be unintentionally overwritten if a block is passed to the mail method. This changes the mail method such that :parts_order is always respected, regardless of whether a block is passed to mail.
Diffstat (limited to 'actionmailer/lib')
-rw-r--r--actionmailer/lib/action_mailer/base.rb14
1 files changed, 6 insertions, 8 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index 6a9828fde7..2b533ad054 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -698,7 +698,7 @@ module ActionMailer
assignable.each { |k, v| m[k] = v }
# Render the templates and blocks
- responses, explicit_order = collect_responses_and_parts_order(headers, &block)
+ responses = collect_responses(headers, &block)
create_parts_from_responses(m, responses)
# Setup content type, reapply charset and handle parts order
@@ -706,8 +706,7 @@ module ActionMailer
m.charset = charset
if m.multipart?
- parts_order ||= explicit_order || headers[:parts_order]
- m.body.set_sort_order(parts_order)
+ m.body.set_sort_order(headers[:parts_order])
m.body.sort_parts!
end
@@ -742,14 +741,13 @@ module ActionMailer
I18n.t(:subject, scope: [mailer_scope, action_name], default: action_name.humanize)
end
- def collect_responses_and_parts_order(headers) #:nodoc:
- responses, parts_order = [], nil
+ def collect_responses(headers) #:nodoc:
+ responses = []
if block_given?
collector = ActionMailer::Collector.new(lookup_context) { render(action_name) }
yield(collector)
- parts_order = collector.responses.map { |r| r[:content_type] }
- responses = collector.responses
+ responses = collector.responses
elsif headers[:body]
responses << {
body: headers.delete(:body),
@@ -769,7 +767,7 @@ module ActionMailer
end
end
- [responses, parts_order]
+ responses
end
def each_template(paths, name, &block) #:nodoc: