Action Mailer MessageDelivery
ActionMailer::MessageDelivery
类在创建新邮件时由 ActionMailer::Base
使用。MessageDelivery
是一个围绕延迟创建的 Mail::Message
的包装器(Delegator
子类)。您可以直接访问 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 102 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 75 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 123 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 111 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 41 def message __getobj__ end
processed?() 链接
代理是否已加载,导致邮件程序操作已处理?
来源:显示 | 在 GitHub 上
# File actionmailer/lib/action_mailer/message_delivery.rb, line 46 def processed? @processed_mailer || @mail_message end