Action Mailer 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
实例公共方法
deliver_later(options = {}) 链接
将电子邮件排队,通过 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
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 136 def deliver_later(options = {}) enqueue_delivery :deliver_now, options end
deliver_later!(options = {}) 链接
将电子邮件排队,通过 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
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 109 def deliver_later!(options = {}) enqueue_delivery :deliver_now!, options end
deliver_now() 链接
发送电子邮件。
Notifier.welcome(User.first).deliver_now
来源: 显示 | 在 GitHub 上
# 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
deliver_now!() 链接
发送电子邮件,而不检查 perform_deliveries 和 raise_delivery_errors,因此请谨慎使用。
Notifier.welcome(User.first).deliver_now!
来源: 显示 | 在 GitHub 上
# 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
message() 链接
返回结果 Mail::Message。
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 75 def message __getobj__ end
processed?() 链接
代理是否已加载,导致邮件发送器操作被处理?
来源: 显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 80 def processed? @processed_mailer || @mail_message end