المكتبة 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.