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 46

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)
Notifier.welcome(User.first).deliver_later(priority: 10)

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.

  • :priority - Enqueues the email with the specified priority

By default, the email will be enqueued using MailDeliveryJob on the default queue. Mailer classes can customize the queue name used for the default job by assigning a deliver_later_queue_name class variable, or provide a custom job by assigning a delivery_job. When a custom job is used, it controls the queue name.

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

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

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)
Notifier.welcome(User.first).deliver_later!(priority: 10)

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

  • :priority - Enqueues the email with the specified priority

By default, the email will be enqueued using MailDeliveryJob on the default queue. Mailer classes can customize the queue name used for the default job by assigning a deliver_later_queue_name class variable, or provide a custom job by assigning a delivery_job. When a custom job is used, it controls the queue name.

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

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

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 123

def deliver_now
  processed_mailer.handle_exceptions do
    processed_mailer.run_callbacks(:deliver) do
      message.deliver
    end
  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 111

def deliver_now!
  processed_mailer.handle_exceptions do
    processed_mailer.run_callbacks(:deliver) do
      message.deliver!
    end
  end
end

#message

Returns the resulting ::Mail::Message

[ GitHub ]

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

def message
  __getobj__
end