класс ActionMailer::MessageDelivery
Класс 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 98
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::DeliveryJob. Каждый класс ActionMailer::Base может указать используемый метод, установив переменную класса delivery_job.
class AccountRegistrationMailer < ApplicationMailer self.delivery_job = RegistrationDeliveryJob end
# File actionmailer/lib/action_mailer/message_delivery.rb, line 72
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::DeliveryJob. Каждый класс ActionMailer::Base может указать используемый метод, установив переменную класса delivery_job.
class AccountRegistrationMailer < ApplicationMailer self.delivery_job = RegistrationDeliveryJob end
# File actionmailer/lib/action_mailer/message_delivery.rb, line 117
def deliver_now
processed_mailer.handle_exceptions do
message.deliver
end
end Отправляет письмо:
Notifier.welcome(User.first).deliver_now
# File actionmailer/lib/action_mailer/message_delivery.rb, line 107
def deliver_now!
processed_mailer.handle_exceptions do
message.deliver!
end
end Отправляет письмо, минуя проверки perform_deliveries и raise_delivery_errors, поэтому используйте с осторожностью.
Notifier.welcome(User.first).deliver_now!
# File actionmailer/lib/action_mailer/message_delivery.rb, line 39 def message __getobj__ end
Возвращает результирующее Mail::Message
# File actionmailer/lib/action_mailer/message_delivery.rb, line 44 def processed? @processed_mailer || @mail_message end
Была ли загружена делегат, вызвав обработку действия почтового сообщения?
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.