انتقل إلى محتوى الدرس
الدرس 52
دورة إطار العمل Laravel

إرسال البريد الإلكتروني عبر Mailable ونظام الإشعارات في LaravelSending Emails with Mailable Classes and Notifications

إعداد خدمات البريد وبناء كلاسات Mailable وإرسال الرسائل عبر واجهة Mail وإطلاق الإشعارات متعددة القنوات Notifications.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 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 إعداد مزودات بديلة تنتقل تلقائياً للعمل في حال تعطل خادم البريد الرئيسي.
مخطط معماري يوضح إرسال البريد الإلكتروني عبر Mailable ونظام الإشعارات في Laravel في إطار العمل Laravel 12
PHP
// .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.
PHP
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 لإرسال كائن الرسالة للمستلم المحدد.
PHP
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.
PHP
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.
PHP
// 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 الجاهزة
PHP
// 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «إعداد مزودات البريد في Laravel» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «بناء كلاس Mailable وعنوان الرسالة» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من إعداد مزودات البريد في Laravel في إطار العمل Laravel 12؟

يسهم إعداد مزودات البريد في Laravel في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «بناء كلاس Mailable وعنوان الرسالة» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة تمرير البيانات وإرفاق ملفات البريد بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة تمرير البيانات وإرفاق ملفات البريد.

04

لماذا يُعد تطبيق إنشاء الإشعارات متعددة القنوات مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق حفظ واستعراض إشعارات قاعدة البيانات في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في مقارنة البريد Mailable بالإشعارات؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.