diff options
author | José Valim <jose.valim@gmail.com> | 2010-01-15 11:24:06 +0100 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2010-01-15 12:24:31 +0100 |
commit | 704daad76208f4581c8169e2cdca096ed804beb4 (patch) | |
tree | dfbca97c50f48d2f5ca2e650d845cd20b4dc3395 | |
parent | 6932f6751e224c8f18e686c6cde5b3885bfc71a8 (diff) | |
download | rails-704daad76208f4581c8169e2cdca096ed804beb4.tar.gz rails-704daad76208f4581c8169e2cdca096ed804beb4.tar.bz2 rails-704daad76208f4581c8169e2cdca096ed804beb4.zip |
Ensure we just send Ruby Stdlib objects in ActionMailer notifications.
-rw-r--r-- | actionmailer/lib/action_mailer/base.rb | 23 | ||||
-rw-r--r-- | actionmailer/lib/action_mailer/railties/subscriber.rb | 6 | ||||
-rw-r--r-- | actionmailer/test/subscriber_test.rb | 2 |
3 files changed, 23 insertions, 8 deletions
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb index 13c9fbd516..91a0007084 100644 --- a/actionmailer/lib/action_mailer/base.rb +++ b/actionmailer/lib/action_mailer/base.rb @@ -398,9 +398,10 @@ module ActionMailer #:nodoc: # ... # end # end - def receive(raw_email) - mail = Mail.new(raw_email) - ActiveSupport::Notifications.instrument("action_mailer.receive", :mail => mail) do + def receive(raw_mail) + ActiveSupport::Notifications.instrument("action_mailer.receive") do |payload| + mail = Mail.new(raw_mail) + set_payload_for_mail(payload, mail) new.receive(mail) end end @@ -424,7 +425,20 @@ module ActionMailer #:nodoc: self.view_paths = ActionView::Base.process_view_paths(root) end + def set_payload_for_mail(payload, mail) #:nodoc: + payload[:subject] = mail.subject + payload[:to] = mail.to + payload[:from] = mail.from + payload[:bcc] = mail.bcc + payload[:cc] = mail.cc + payload[:reply_to] = mail.reply_to + payload[:date] = mail.date + payload[:body] = mail.body.encoded + payload[:mail] = mail.encoded + end + private + def matches_dynamic_method?(method_name) #:nodoc: method_name = method_name.to_s /^(create|deliver)_([_a-z]\w*)/.match(method_name) || /^(new)$/.match(method_name) @@ -497,7 +511,8 @@ module ActionMailer #:nodoc: begin ActiveSupport::Notifications.instrument("action_mailer.deliver", - :mail => @mail, :mailer => self) do + :template => template, :mailer_name => mailer_name) do |payload| + self.class.set_payload_for_mail(payload, mail) self.delivery_method.perform_delivery(mail) if perform_deliveries end rescue Exception => e # Net::SMTP errors or sendmail pipe errors diff --git a/actionmailer/lib/action_mailer/railties/subscriber.rb b/actionmailer/lib/action_mailer/railties/subscriber.rb index aafc155b09..af9c477237 100644 --- a/actionmailer/lib/action_mailer/railties/subscriber.rb +++ b/actionmailer/lib/action_mailer/railties/subscriber.rb @@ -2,14 +2,14 @@ module ActionMailer module Railties class Subscriber < Rails::Subscriber def deliver(event) - recipients = Array(event.payload[:mailer].recipients).join(', ') + recipients = Array(event.payload[:to]).join(', ') info("Sent mail to #{recipients} (%1.fms)" % event.duration) - debug("\n#{event.payload[:mail].encoded}") + debug("\n#{event.payload[:mail]}") end def receive(event) info("Received mail (%.1fms)" % event.duration) - debug("\n#{event.payload[:mail].encoded}") + debug("\n#{event.payload[:mail]}") end def logger diff --git a/actionmailer/test/subscriber_test.rb b/actionmailer/test/subscriber_test.rb index aab53b385f..01a71f481d 100644 --- a/actionmailer/test/subscriber_test.rb +++ b/actionmailer/test/subscriber_test.rb @@ -31,7 +31,7 @@ module SubscriberTest assert_match /Hello world/, @logger.logged(:debug).first end - def test_receive_is_notifier + def test_receive_is_notified fixture = File.read(File.dirname(__FILE__) + "/fixtures/raw_email") TestMailer.receive(fixture) wait |