Class: ActionMailer::MessageDelivery

Inherits:
Delegator
  • Object
show all
Defined in:
actionmailer/lib/action_mailer/message_delivery.rb

Overview

The ActionMailer::MessageDelivery class is used by ActionMailer::Base when creating a new mailer. MessageDelivery is a wrapper (Delegator subclass) around a lazy created Mail::Message. You can get direct access to the Mail::Message, deliver the email or schedule the email to be sent through Active Job.

Notifier.welcome(User.first)               # an ActionMailer::MessageDelivery object
Notifier.welcome(User.first).deliver_now   # sends the email
Notifier.welcome(User.first).deliver_later # enqueue email delivery as a job through Active Job
Notifier.welcome(User.first).message       # a Mail::Message object

Instance Method Summary collapse

Constructor Details

#initialize(mailer, mail_method, *args) ⇒ MessageDelivery

:nodoc:


18
19
20
21
22
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 18

def initialize(mailer, mail_method, *args) #:nodoc:
  @mailer = mailer
  @mail_method = mail_method
  @args = args
end

Instance Method Details

#__getobj__Object

:nodoc:


24
25
26
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 24

def __getobj__ #:nodoc:
  @obj ||= @mailer.send(:new, @mail_method, *@args).message
end

#__setobj__(obj) ⇒ Object

:nodoc:


28
29
30
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 28

def __setobj__(obj) #:nodoc:
  @obj = obj
end

#deliverObject

:nodoc:


98
99
100
101
102
103
104
105
106
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 98

def deliver #:nodoc:
  ActiveSupport::Deprecation.warn(<<-MSG.squish)
    `#deliver` is deprecated and will be removed in Rails 5. Use
    `#deliver_now` to deliver immediately or `#deliver_later` to
    deliver through Active Job.
  MSG

  deliver_now
end

#deliver!Object

:nodoc:


88
89
90
91
92
93
94
95
96
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 88

def deliver! #:nodoc:
  ActiveSupport::Deprecation.warn(<<-MSG.squish)
    `#deliver!` is deprecated and will be removed in Rails 5. Use
    `#deliver_now!` to deliver immediately or `#deliver_later!` to
    deliver through Active Job.
  MSG

  deliver_now!
end

#deliver_later(options = {}) ⇒ Object

Enqueues the email to be delivered through Active Job. When the job runs it will send the email using deliver_now.

Notifier.welcome(User.first).deliver_later
Notifier.welcome(User.first).deliver_later(wait: 1.hour)
Notifier.welcome(User.first).deliver_later(wait_until: 10.hours.from_now)

Options:

  • :wait - Enqueue the email to be delivered with a delay

  • :wait_until - Enqueue the email to be delivered at (after) a specific date / time

  • :queue - Enqueue the email on the specified queue


67
68
69
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 67

def deliver_later(options={})
  enqueue_delivery :deliver_now, options
end

#deliver_later!(options = {}) ⇒ Object

Enqueues the email to be delivered through Active Job. When the job runs it will send the email using deliver_now!. That means that the message will be sent bypassing checking perform_deliveries and raise_delivery_errors, so use with caution.

Notifier.welcome(User.first).deliver_later!
Notifier.welcome(User.first).deliver_later!(wait: 1.hour)
Notifier.welcome(User.first).deliver_later!(wait_until: 10.hours.from_now)

Options:

  • :wait - Enqueue the email to be delivered with a delay

  • :wait_until - Enqueue the email to be delivered at (after) a specific date / time

  • :queue - Enqueue the email on the specified queue


51
52
53
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 51

def deliver_later!(options={})
  enqueue_delivery :deliver_now!, options
end

#deliver_nowObject

Delivers an email:

Notifier.welcome(User.first).deliver_now

84
85
86
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 84

def deliver_now
  message.deliver
end

#deliver_now!Object

Delivers an email without checking perform_deliveries and raise_delivery_errors, so use with caution.

Notifier.welcome(User.first).deliver_now!

76
77
78
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 76

def deliver_now!
  message.deliver!
end

#messageObject

Returns the Mail::Message object


33
34
35
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 33

def message
  __getobj__
end