المكتبة Action Mailer في ريلز

من موسوعة حسوب

إنَّ Action Mailer هو إطار عمل لتصميم طبقات خدمة البريد الإلكتروني. تُستخدَم هذه الطبقات لإنشاء شيفرة تعمل على إرسال البريد الإلكتروني المتعلق بكلمات المرور المنسية، ورسائل الترحيب بالعضو الجديد، والفواتير الواجب دفعها، وأية حالة أخرى تتطلب إرسال تنبيه مكتوب إمَّا إلى الشخص نفسه أو إلى نظام آخر.

يعدُّ Action Mailer مغلفًا حول Action Controller والجوهرة Mail، إذ يوفر وسيلةً لإنشاء رسائل البريد الإلكتروني عبر قوالبٍ مُستعمِلًا الطريقة نفسها التي يصير بها Action Controller واجهات العرض المستندة إلى قوالب جاهزة.

أضف إلى ذلك أن الصنف Action Mailer يمكن استخدامه لمعالجة رسائل البريد الإلكتروني الواردة مثل السماح لمدونة بقبول منشورات جديدة عبر البريد الإلكتروني (الذي يمكن أن يُرسَل من الهاتف).

يمكنك الاطلاع على المزيد حول Action Mailer في دليل أساسيات Action Mailer.

إرسال الرسائل البريدية

يعمل الإطار عبر تهيئة متغيرات النسخة التي تريدها أن تكون متاحة في قالب رسالة البريد ثم استدعاء mail لتوصيل الرسالة. يمكن تنفيذ ذلك بكل بساطة عبر الشيفرة التالية:

class Notifier < ActionMailer::Base
  default from: 'system@loudthinking.com'

  def welcome(recipient)
    @recipient = recipient
    mail(to: recipient,
         subject: "[Signed up] Welcome #{recipient}")
  end
end

يُنشَأ محتوى البريد عبر استعمال قالب Action View (ملف ERB اعتيادي) يحوي متغيرات النسخة التي صُرِّح عنها. أي يمكن أن يكون محتوى القالب المقابل للتابع المذكور في الشيفرة السابقة شيئًا شبيهًا بالقالب التالي:

Hello there,

Mr. <%= @recipient %>

Thank you for signing up!

إن كانت قيمة المستلم recipient هي david@loudthinking.com مثلًا، فسيبدو البريد الذي يُولَّد ويُرسَل بالشكل التالي:

Date: Mon, 25 Jan 2010 22:48:09 +1100
From: system@loudthinking.com
To: david@loudthinking.com
Message-ID: <4b5d84f9dd6a5_7380800b81ac29578@void.loudthinking.com.mail>
Subject: [Signed up] Welcome david@loudthinking.com
Mime-Version: 1.0
Content-Type: text/plain;
	charset="US-ASCII";
Content-Transfer-Encoding: 7bit

Hello there,

Mr. david@loudthinking.com

Thank you for signing up!

لإرسال رسائل بريد إلكتروني، يمكنك ببساطة استدعاء التابع ثم استدعاء deliver_now مع القيمة المعادة. يعيد استدعاء التابع كائنًا من النوع Mail::Message:

message = Notifier.welcome("david@loudthinking.com")   # => Returns a Mail::Message object
message.deliver_now                                    # => delivers the email

أو يمكنك سلسلة التابعين مع بعضهما بعضًا مباشرةً:

Notifier.welcome("david@loudthinking.com").deliver_now 
# إنشاء البريد وإرساله مباشرة

ضبط قيم افتراضية

يُحتمَل ضبط قيم افتراضية يراد استعمالها في كل تابع موجود في الصنف Action Mailer. ما عليك فعله لتنفيذ ذلك هو استدعاء تابع الصنف العام default الذي يمكنك الحصول عليه من ActionMailer::Base دون مقابل. يقبل هذا التابع جدول Hash كمعامل، إذ تكون المفاتيح المستعملة فيه أيًّا من الترويسات - التي تملكها رسائل البريد - مثل from:. يمكنك أيضًا تمرير سلسلة نصية تمثِّل المفتاح مثل Content-Type ولكن يقبل Action Mailer ذلك بشكل غير اعتيادي من أجلك، فلا تقلق حيال ذلك. أخيرًا - وليس آخرًا -، يمكن أيضًا تمرير كائن من النوع Proc يُقيَّم عند الحاجة إليه.

انتبه إلى أن كل قيمة تضبطها مع هذا التابع ستُستبدَل إن استعملت المفتاح نفسه مع التابع المرسل الخاص بك.

إليك المثال التالي:

class AuthenticationMailer < ActionMailer::Base
  default from: "awesome@application.com", subject: Proc.new { "E-mail was generated at #{Time.now}" }
  .....
end

الضبط

الصنف Base يملك قائمة شاملة بخيارات الضبط. إليك المثال التالي:

ActionMailer::Base.smtp_settings = {
  address:        'smtp.yourserver.com', # default: localhost
  port:           '25',                  # default: 25
  user_name:      'user',
  password:       'pass',
  authentication: :plain                 # :plain, :login or :cram_md5
}

التنزيل والتثبيت

يمكنك تنزيل أحدث إصدار من Action Mailer مع RubyGems:

$ gem install actionmailer

يمكن تنزيل الشيفرة المصدرية كجزء من مشروع ريلز على GitHub.

مصادر