From e76c38ef1047ad3ffb25c1c639c38432a9228796 Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Fri, 30 Oct 2015 14:53:05 -0700
Subject: split `process` from mailer instantiation

this allows us to construct mailer objects without possibly disastrous
side-effects.
---
 actionmailer/lib/action_mailer/base.rb             | 5 +----
 actionmailer/lib/action_mailer/message_delivery.rb | 6 +++++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index c9e7f7d0d3..cbd7cec70f 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -441,8 +441,6 @@ module ActionMailer
 
     helper ActionMailer::MailHelper
 
-    private_class_method :new #:nodoc:
-
     class_attribute :default_params
     self.default_params = {
       mime_version: "1.0",
@@ -580,11 +578,10 @@ module ActionMailer
     # will be initialized according to the named method. If not, the mailer will
     # remain uninitialized (useful when you only need to invoke the "receive"
     # method, for instance).
-    def initialize(method_name=nil, *args)
+    def initialize
       super()
       @_mail_was_called = false
       @_message = Mail.new
-      process(method_name, *args) if method_name
     end
 
     def process(method_name, *args) #:nodoc:
diff --git a/actionmailer/lib/action_mailer/message_delivery.rb b/actionmailer/lib/action_mailer/message_delivery.rb
index 622d481113..5fcb5a0c88 100644
--- a/actionmailer/lib/action_mailer/message_delivery.rb
+++ b/actionmailer/lib/action_mailer/message_delivery.rb
@@ -21,7 +21,11 @@ module ActionMailer
     end
 
     def __getobj__ #:nodoc:
-      @obj ||= @mailer.send(:new, @mail_method, *@args).message
+      @obj ||= begin
+                 mailer = @mailer.new
+                 mailer.process @mail_method, *@args
+                 mailer.message
+               end
     end
 
     def __setobj__(obj) #:nodoc:
-- 
cgit v1.2.3