Spec-Zone.ru › Ruby on Rails 8.1

класс ActionMailer::MessageDelivery

Родитель:
Delegator

Доставка сообщений Action Mailer

Класс ActionMailer::MessageDelivery используется классом ActionMailer::Base при создании нового почтового модуля. MessageDelivery — это оболочка (подкласс Delegator) для отложенно созданного объекта Mail::Message. Вы можете получить прямой доступ к объекту Mail::Message, доставить электронное письмо или запланировать его отправку через 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

Открытые методы экземпляра

deliver_later (options = {}) Показать исходный код
# File actionmailer/lib/action_mailer/message_delivery.rb, line 136
def deliver_later(options = {})
  enqueue_delivery :deliver_now, options
end

Ставит электронное письмо в очередь для доставки через Active Job. Когда задание будет выполнено, оно отправит письмо с помощью 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)

Параметры:

  • :wait — поставить электронное письмо в очередь для доставки с задержкой.

  • :wait_until — поставить электронное письмо в очередь для доставки в указанную дату и время или после них.

  • :queue — поставить электронное письмо в указанную очередь.

  • :priority — поставить электронное письмо в очередь с указанным приоритетом

По умолчанию электронное письмо ставится в очередь с помощью ActionMailer::MailDeliveryJob в очередь по умолчанию. Классы почтовых модулей могут настроить имя очереди для задания по умолчанию, присвоив значение переменной класса deliver_later_queue_name, либо указать собственное задание, присвоив значение delivery_job. При использовании собственного задания оно управляет именем очереди.

class AccountRegistrationMailer < ApplicationMailer
  self.delivery_job = RegistrationDeliveryJob
end
deliver_later! (options = {}) Показать исходный код
# File actionmailer/lib/action_mailer/message_delivery.rb, line 109
def deliver_later!(options = {})
  enqueue_delivery :deliver_now!, options
end

Ставит электронное письмо в очередь для доставки через Active Job. Когда задание будет выполнено, оно отправит письмо с помощью deliver_now!. Это означает, что сообщение будет отправлено без проверки perform_deliveries и raise_delivery_errors, поэтому используйте этот метод с осторожностью.

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)

Параметры:

  • :wait — поставить электронное письмо в очередь для доставки с задержкой

  • :wait_until — поставить электронное письмо в очередь для доставки в указанную дату и время или после них

  • :queue — поставить электронное письмо в указанную очередь

  • :priority — поставить электронное письмо в очередь с указанным приоритетом

По умолчанию электронное письмо ставится в очередь с помощью ActionMailer::MailDeliveryJob в очередь по умолчанию. Классы почтовых модулей могут настроить имя очереди для задания по умолчанию, присвоив значение переменной класса deliver_later_queue_name, либо указать собственное задание, присвоив значение delivery_job. При использовании собственного задания оно управляет именем очереди.

class AccountRegistrationMailer < ApplicationMailer
  self.delivery_job = RegistrationDeliveryJob
end
deliver_now () Показать исходный код
# File actionmailer/lib/action_mailer/message_delivery.rb, line 157
def deliver_now
  processed_mailer.handle_exceptions do
    processed_mailer.run_callbacks(:deliver) do
      message.deliver
    end
  end
end

Доставляет электронное письмо:

Notifier.welcome(User.first).deliver_now
deliver_now! () Показать исходный код
# File actionmailer/lib/action_mailer/message_delivery.rb, line 145
def deliver_now!
  processed_mailer.handle_exceptions do
    processed_mailer.run_callbacks(:deliver) do
      message.deliver!
    end
  end
end

Доставляет электронное письмо без проверки perform_deliveries и raise_delivery_errors, поэтому используйте этот метод с осторожностью.

Notifier.welcome(User.first).deliver_now!
message () Показать исходный код
# File actionmailer/lib/action_mailer/message_delivery.rb, line 75
def message
  __getobj__
end

Возвращает полученный объект Mail::Message

processed? () Показать исходный код
# File actionmailer/lib/action_mailer/message_delivery.rb, line 80
def processed?
  @processed_mailer || @mail_message
end

Был ли загружен делегат, в результате чего обработалось действие почтового модуля?

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API