123456789_123456789_123456789_123456789_123456789_

Class: ActionMailer::MessageDelivery

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Subclasses:
ActionMailer::Parameterized::MessageDelivery
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, ::Delegator
Instance Chain:
self, ::Delegator
Inherits: Delegator
Defined in: actionmailer/lib/action_mailer/message_delivery.rb

Overview

The MessageDelivery class is used by 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 Attribute Summary

Instance Method Summary

::Delegator - Inherited

Instance Attribute Details

#processed?Boolean (readonly)

Was the delegate loaded, causing the mailer action to be processed?

[ GitHub ]

  
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 43

def processed?
  @processed_mailer || @mail_message
end

Instance Method Details

#deliver_later(options = {})

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.

By default, the email will be enqueued using DeliveryJob. Each Base class can specify the job to use by setting the class variable delivery_job.

class AccountRegistrationMailer < ApplicationMailer
  self.delivery_job = RegistrationDeliveryJob
end
[ GitHub ]

  
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 93

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

#deliver_later!(options = {})

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

By default, the email will be enqueued using DeliveryJob. Each Base class can specify the job to use by setting the class variable delivery_job.

class AccountRegistrationMailer < ApplicationMailer
  self.delivery_job = RegistrationDeliveryJob
end
[ GitHub ]

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

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

#deliver_now

Delivers an email:

Notifier.welcome(User.first).deliver_now
[ GitHub ]

  
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 112

def deliver_now
  processed_mailer.handle_exceptions do
    message.deliver
  end
end

#deliver_now!

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

Notifier.welcome(User.first).deliver_now!
[ GitHub ]

  
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 102

def deliver_now!
  processed_mailer.handle_exceptions do
    message.deliver!
  end
end

#message

Returns the resulting Mail::Message

[ GitHub ]

  
# File 'actionmailer/lib/action_mailer/message_delivery.rb', line 38

def message
  __getobj__
end