From 704daad76208f4581c8169e2cdca096ed804beb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Fri, 15 Jan 2010 11:24:06 +0100 Subject: Ensure we just send Ruby Stdlib objects in ActionMailer notifications. --- actionmailer/lib/action_mailer/base.rb | 23 ++++++++++++++++++---- .../lib/action_mailer/railties/subscriber.rb | 6 +++--- 2 files changed, 22 insertions(+), 7 deletions(-) (limited to 'actionmailer/lib') 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 -- cgit v1.2.3