класс ActionMailer::MessageDelivery
Доставка сообщений 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
Открытые методы экземпляра
# 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
# 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
# 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
# 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!
# File actionmailer/lib/action_mailer/message_delivery.rb, line 75 def message __getobj__ end
Возвращает полученный объект Mail::Message
# 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.