Ruby on Rails 5.2 - ActionMailer::MessageDelivery

क्लास एक्शनमेलर :: MessageDelivery




ruby

क्लास एक्शनमेलर :: MessageDelivery

जनक:
Delegator

ActionMailer::MessageDelivery वर्ग का उपयोग ActionMailer::Base द्वारा एक नया मेलर बनाते समय किया जाता है। MessageDelivery एक आलसी बनाया गया Mail::Message आसपास एक रैपर ( Delegator उपवर्ग) है Mail::Message । आप Mail::Message तक सीधे पहुंच प्राप्त कर सकते हैं, ईमेल वितरित कर सकते हैं या सक्रिय नौकरी के माध्यम से भेजे जाने वाले ईमेल को शेड्यूल कर सकते हैं।

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 93
def deliver_later(options = {})
  enqueue_delivery :deliver_now, options
end

सक्रिय नौकरी के माध्यम से वितरित करने के लिए ईमेल को सक्रिय करता है। जब नौकरी चलेगी, तो वह 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)

विकल्प:

  • :wait - ईमेल को देरी से वितरित किया जाए।

  • :wait_until - एक विशिष्ट दिनांक / समय पर (बाद में) वितरित किए जाने वाले ईमेल को :wait_until

  • :queue - निर्दिष्ट कतार पर ईमेल संलग्न करें।

डिफ़ॉल्ट रूप से, ActionMailer::DeliveryJob का उपयोग करके ईमेल एनकाउट किया जाएगा। प्रत्येक ActionMailer::Base क्लास क्लास वेरिएबल delivery_job सेट करके काम का उपयोग करने के लिए निर्दिष्ट कर सकता है।

class AccountRegistrationMailer < ApplicationMailer
  self.delivery_job = RegistrationDeliveryJob
end
deliver_later! (विकल्प = {}) स्रोत दिखाएं
# File actionmailer/lib/action_mailer/message_delivery.rb, line 69
def deliver_later!(options = {})
  enqueue_delivery :deliver_now!, options
end

सक्रिय नौकरी के माध्यम से वितरित करने के लिए ईमेल को सक्रिय करता है। जब नौकरी चलेगी, तो वह deliver_now! का उपयोग करके ईमेल भेजेगा 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)

विकल्प:

  • :wait - ईमेल को देरी से वितरित किया जाए

  • :wait_until - एक विशिष्ट दिनांक / समय पर (बाद में) वितरित किए जाने वाले ईमेल को :wait_until

  • :queue - निर्दिष्ट कतार पर ईमेल संलग्न करें

डिफ़ॉल्ट रूप से, ActionMailer::DeliveryJob का उपयोग करके ईमेल एनकाउट किया जाएगा। प्रत्येक ActionMailer::Base क्लास क्लास वेरिएबल delivery_job सेट करके काम का उपयोग करने के लिए निर्दिष्ट कर सकता है।

class AccountRegistrationMailer < ApplicationMailer
  self.delivery_job = RegistrationDeliveryJob
end
डिलीवर_ओन () स्रोत दिखाएं
# File actionmailer/lib/action_mailer/message_delivery.rb, line 112
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 102
def deliver_now!
  processed_mailer.handle_exceptions do
    message.deliver!
  end
end

perform_deliveries और raise_delivery_errors जाँच किए बिना एक ईमेल raise_delivery_errors , इसलिए सावधानी के साथ उपयोग करें।

Notifier.welcome(User.first).deliver_now!
# File actionmailer/lib/action_mailer/message_delivery.rb, line 38
def message
  __getobj__
end

परिणामी मेल :: संदेश देता है

संसाधित? () स्रोत दिखाएं
# File actionmailer/lib/action_mailer/message_delivery.rb, line 43
def processed?
  @processed_mailer || @mail_message
end

क्या प्रतिनिधि को लोड किया गया था, जिसके कारण मेलर पर कार्रवाई की गई?