Action Mailer MessageDelivery
创建新邮件程序时,ActionMailer::Base
使用 ActionMailer::MessageDelivery
类。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 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