في هذا الدرس 6تصفّح المواضيع
يوفر Laravel واجهة برمجية موحدة ونظيفة لإرسال البريد الإلكتروني تعتمد على مكون Symfony Mailer ويتم ضبطها عبر ملف config/mail.php ومتغيرات البيئة. أثناء التطوير المحلي، يتيح ضبط المتغير MAIL_MAILER=log كتابة محتوى الرسائل الصادرة بأمان داخل ملف السجل بدلاً من إرسالها فعلياً.
- إعدادات ملف البيئة (Environment Configuration): اضبط متغيرات MAIL_MAILER و MAIL_HOST و MAIL_PORT و MAIL_FROM_ADDRESS في ملف البيئة.
- الاختبار المحلي الآمن (Safe Local Testing): استخدم المزود log أو أداة التقاط محلية مثل Mailpit لتجربة الرسائل أثناء التطوير.
- المزود الاحتياطي (Failover Transports): يدعم Laravel إعداد مزودات بديلة تنتقل تلقائياً للعمل في حال تعطل خادم البريد الرئيسي.
// .env configuration for local development:
// MAIL_MAILER=log
// MAIL_FROM_ADDRESS="[email protected]"
// MAIL_FROM_NAME="CloseTag App"
$mailer = config('mail.default');
في Laravel 12، يُمثل كل نوع من رسائل البريد بكلاس Mailable مستقل يتم توليده عبر الأمر php artisan make:mail. ينظم الكلاس بيانات الرسالة الوصفية داخل دالة envelope التي تُرجع كائن Envelope، وإعدادات القالب داخل دالة content التي تُرجع كائن Content.
- تعريف الغلاف (Envelope Definition): حدد عنوان الرسالة وعنوان المرسل وبيانات الرد داخل دالة envelope.
- ربط قالب المحتوى (Content View Binding): عيّن اسم قالب Blade المسؤول عن رسم جسم الرسالة داخل دالة content.
- الفصل المعماري النظيف (Clean Separation): يبعد منطق تنسيق البريد وعناوينه تماماً عن متحكمات طلبات HTTP.
class OrderShipped extends Mailable {
public function envelope(): Envelope {
return new Envelope(subject: 'Order Shipped');
}
public function content(): Content {
return new Content(view: 'emails.shipped');
}
}
إن أي خاصية عامة معرّفة داخل كلاس Mailable، مثل خصائص الباني المرقاة، تصبح متاحة تلقائياً داخل قالب Blade الخاص بالرسالة. يمكنك أيضاً إرفاق الملفات المخزنة على أقراص Laravel عبر إرجاع كائنات Attachment من دالة attachments، ثم إرسال الرسالة بواجهة Mail::to.
- مشاركة الخصائص العامة (Public Property Sharing): عرّف معاملات دالة الباني بكلمة public لتتوفر مباشرة داخل قالب Blade.
- مرفقات أقراص التخزين (Disk Attachments): استخدم Attachment::fromStorageDisk لإرفاق الفواتير والملفات مع تخصيص الاسم والنوع.
- واجهة Mail السلسة (Fluent Mail Facade): استدع Mail::to($user)->send لإرسال كائن الرسالة للمستلم المحدد.
use App\Mail\OrderShipped;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Support\Facades\Mail;
// Return Attachment::fromPath(...) in attachments()
Mail::to($request->user())
->send(new OrderShipped($order));
بينما تتفوق كلاسات Mailable في رسائل البريد الغنية والمفصلة، صُمم نظام الإشعارات Notifications لإرسال التنبيهات السريعة عبر قنوات متعددة مثل البريد وقاعدة البيانات. ولّد كلاس الإشعار بالأمر php artisan make:notification وحدد قنوات التوصيل المطلوبة داخل دالة via.
- التوجيه متعدد القنوات (Multi-Channel Routing): أرجع المصفوفة ['mail', 'database'] من دالة via لإرسال التنبيه عبر القناتين معاً.
- باني MailMessage السلس (Fluent MailMessage Builder): صمم رسالة بريد أنيقة داخل دالة toMail باستخدام دوال greeting و line و action.
- سمة Notifiable (Notifiable Trait): يتضمن نموذج المستخدم الافتراضي سمة Notifiable التي توفر دالة $user->notify.
class InvoicePaid extends Notification {
public function via(object $notifiable): array {
return ['mail', 'database'];
}
public function toMail(object $n): MailMessage {
return (new MailMessage)->line('Paid!');
}
}
لحفظ تنبيهات التطبيق داخل قاعدة البيانات، نفذ الأمر php artisan make:notifications-table وشغل التهجير، ثم عرّف دالة toArray داخل كلاس الإشعار. تُحفظ المصفوفة المُرجعة كبيانات JSON في جدول notifications ويمكن استعلامها بسهولة عبر علاقة unreadNotifications.
- بيانات JSON المهيكلة (Structured JSON Payload): أرجع مصفوفة ترابطية ببيانات التنبيه مثل رقم الفاتورة والمبلغ من دالة toArray.
- جلب التنبيهات غير المقروءة (Querying Unread Alerts): استخدم خاصية unreadNotifications على كائن المستخدم لعرض قائمة جرس التنبيهات.
- تحديد كمقروء (Marking as Read): استدع دالة markAsRead على إشعار مفرد أو على مجموعة التنبيهات غير المقروءة لتحديث عمود read_at.
// Dispatch notification:
$user->notify(new InvoicePaid($invoice));
// Mark unread notifications as read:
$user->unreadNotifications->markAsRead();
يعتمد الاختيار بين كلاس Mailable ونظام الإشعارات Notification على ما إذا كنت ترسل رسالة بريدية مخصصة بالكامل أو تنبيهاً عابراً للقنوات للمستخدم. استخدم هذا الدليل المعماري لاختيار الأداة الأنسب لكل سيناريو مراسلة في تطبيق Laravel.
| وجه المقارنة الهندسي | الأسلوب المتزامن أو التقليدي | معيار Laravel 12 الحديث |
|---|---|---|
| بناء رسائل البريد | استخدام دوال البريد الخام أو كتابة نصوص HTML داخل المتحكم | كلاسات Mailable مستقلة تعتمد على كائني Envelope و Content |
| الاختبار في بيئة التطوير | مخاطرة إرسال رسائل حقيقية لعملاء فعليين أثناء التجربة المحلية | استخدام المزود الآمن MAIL_MAILER=log أو خادم التقاط محلي |
| التنبيهات متعددة القنوات | كتابة كود منفصل لإرسال البريد وآخر لحفظ التنبيه في القاعدة | كلاس Notification موحد يوجه التنبيه عبر قناتي mail و database |
| إدارة حالة القراءة | إنشاء جداول واستعلامات يدوية لتتبع التنبيهات غير المقروءة | نظام مدمج يوفر unreadNotifications ودالة markAsRead الجاهزة |
// Send Mailable to any email address:
Mail::to('[email protected]')
->send(new OrderShipped($order));
// Send multi-channel Notification to a User:
$user->notify(new InvoicePaid($invoice));
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنت في هذا الدرس حول «إرسال البريد الإلكتروني عبر Mailable ونظام الإشعارات في Laravel» مفاهيم إعداد مزودات البريد في Laravel، وبناء كلاس Mailable وعنوان الرسالة، وتمرير البيانات وإرفاق ملفات البريد وفق معايير Laravel 12 الحديثة.
الخطوة التالية والدرس القادم
انتقل الآن إلى الدرس التالي «تشغيل المهام الخلفية وإدارة طوابير الانتظار Queues في Laravel» للبناء التراكمي على ما تعلمته.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Mail Classes إرسال البريد
- إعداد خدمات البريد وبناء كلاسات Mailable وإرسال الرسائل عبر واجهة Mail وإطلاق الإشعارات متعددة القنوات Notifications.
- للمراجعة
- 02 Configuring Mail Drivers in Env إعداد مزودات البريد في Laravel
- المفهوم الهندسي والتطبيق العملي المباشر لقسم إعداد مزودات البريد في Laravel في إطار العمل Laravel 12.
- للمراجعة
- 03 Building Mailable Envelope and Content بناء كلاس Mailable وعنوان الرسالة
- المفهوم الهندسي والتطبيق العملي المباشر لقسم بناء كلاس Mailable وعنوان الرسالة في إطار العمل Laravel 12.
- للمراجعة
- 04 Passing Data and Mail Attachments تمرير البيانات وإرفاق ملفات البريد
- المفهوم الهندسي والتطبيق العملي المباشر لقسم تمرير البيانات وإرفاق ملفات البريد في إطار العمل Laravel 12.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 MVC MVC
- Model View Controller
- النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
- للمراجعة
- 02 CLI CLI
- Command Line Interface
- واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
- للمراجعة
- 03 HTTP HTTP
- Hypertext Transfer Protocol
- بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
- للمراجعة
- 04 PSR PSR
- PHP Standards Recommendations
- المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «إعداد مزودات البريد في Laravel» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «بناء كلاس Mailable وعنوان الرسالة» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من إعداد مزودات البريد في Laravel في إطار العمل Laravel 12؟
يسهم إعداد مزودات البريد في Laravel في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «بناء كلاس Mailable وعنوان الرسالة» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة تمرير البيانات وإرفاق ملفات البريد بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة تمرير البيانات وإرفاق ملفات البريد.
لماذا يُعد تطبيق إنشاء الإشعارات متعددة القنوات مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق حفظ واستعراض إشعارات قاعدة البيانات في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مقارنة البريد Mailable بالإشعارات؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.