Action Mailer MessageDelivery
當建立新的郵件寄送裝置時,ActionMailer::Base
類別會使用到 ActionMailer::MessageDelivery
類別。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