الفرق بين المراجعتين ل"Laravel/mail"

من موسوعة حسوب
اذهب إلى التنقل اذهب إلى البحث
 
(4 مراجعات متوسطة بواسطة نفس المستخدم غير معروضة)
سطر 1: سطر 1:
=== مقدمة===
+
<noinclude>{{DISPLAYTITLE:التعامل مع البريد الإلكتروني  (Mail) في Laravel}}</noinclude>
 +
== مقدمة==
 
يوفّر [[Laravel]] واجهة برمجية (API) سلسة و بسيطة للمكتبة الرائجة SwiftMailer مع برنامج تشغيل لكل من SMTP و Mailgun و SparkPost و Amazon SOS وتابع mail ، و sendmail. ممّا يسمح بالبداية في إرسال الرسائل الإكترونية بسرعة عبر خدمات محلية أو سحابية من اختيارك.
 
يوفّر [[Laravel]] واجهة برمجية (API) سلسة و بسيطة للمكتبة الرائجة SwiftMailer مع برنامج تشغيل لكل من SMTP و Mailgun و SparkPost و Amazon SOS وتابع mail ، و sendmail. ممّا يسمح بالبداية في إرسال الرسائل الإكترونية بسرعة عبر خدمات محلية أو سحابية من اختيارك.
====برامج التشغيل اللازمة====
+
===برامج التشغيل اللازمة===
 
تكون برامج التشغيل المعتمدة على الوسائط مثل Mailgun و SparkPost في العادة أسرع وأسهل في الاستعمال من خوادم SMTP. استعمل أحد هذه برامج التشغيل إن أمكنك. تَستعمل كل المشغّلات التي تعتمد على الوسائط (API) المكتبة Guzzle التي يمكنك تثبيتها باستعمال منظم الحزم <code>Composer</code>.<syntaxhighlight lang="php">
 
تكون برامج التشغيل المعتمدة على الوسائط مثل Mailgun و SparkPost في العادة أسرع وأسهل في الاستعمال من خوادم SMTP. استعمل أحد هذه برامج التشغيل إن أمكنك. تَستعمل كل المشغّلات التي تعتمد على الوسائط (API) المكتبة Guzzle التي يمكنك تثبيتها باستعمال منظم الحزم <code>Composer</code>.<syntaxhighlight lang="php">
 
composer require guzzlehttp/guzzle  
 
composer require guzzlehttp/guzzle  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====برنامج التشغيل Mailgun=====
+
====برنامج التشغيل Mailgun====
 
لاستخدام برنامج التشغيل Mailgun، أولًا ثبّت Guzzle ثمّ غير الخيار <code>driver</code> في ملف الضبط <code>config/mail.php</code> للقيمة <code>mailgun</code>. بعد ذلك، تثبت من أنّ ملف الضبط <code>config/services.php</code> يحتوي الخيار التالي:<syntaxhighlight lang="php">
 
لاستخدام برنامج التشغيل Mailgun، أولًا ثبّت Guzzle ثمّ غير الخيار <code>driver</code> في ملف الضبط <code>config/mail.php</code> للقيمة <code>mailgun</code>. بعد ذلك، تثبت من أنّ ملف الضبط <code>config/services.php</code> يحتوي الخيار التالي:<syntaxhighlight lang="php">
 
'mailgun' => [
 
'mailgun' => [
سطر 15: سطر 16:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====برنامج التشغيل SparkPost=====
+
====برنامج التشغيل SparkPost====
 
لاستخدام برنامج التشغيل SparkPost، أولا ثبّت Guzzle ثمّ غير الخيار <code>driver</code> في ملف الضبط <code>config/mail.php</code> للقيمة <code>sparkpost</code>. بعد ذلك، تثبت من أنّ ملف الضبط <code>config/services.php</code> يحتوي الخيار التالي:<syntaxhighlight lang="php">
 
لاستخدام برنامج التشغيل SparkPost، أولا ثبّت Guzzle ثمّ غير الخيار <code>driver</code> في ملف الضبط <code>config/mail.php</code> للقيمة <code>sparkpost</code>. بعد ذلك، تثبت من أنّ ملف الضبط <code>config/services.php</code> يحتوي الخيار التالي:<syntaxhighlight lang="php">
 
'sparkpost' => [
 
'sparkpost' => [
سطر 36: سطر 37:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====برنامج التشغيل SES=====
+
====برنامج التشغيل SES====
 
لاستخدام برنامج التشغيل Amazon SES يجب أولًا تثبيت Amazon AWS SDK الخاص بلغة PHP. يمكنك تثبيت المكتبة عبر إضافة السطر التالي للقسم <code>require</code> من الملف <code>composer.json</code>:<syntaxhighlight lang="php">
 
لاستخدام برنامج التشغيل Amazon SES يجب أولًا تثبيت Amazon AWS SDK الخاص بلغة PHP. يمكنك تثبيت المكتبة عبر إضافة السطر التالي للقسم <code>require</code> من الملف <code>composer.json</code>:<syntaxhighlight lang="php">
 
"aws/aws-sdk-php": "~3.0"
 
"aws/aws-sdk-php": "~3.0"
سطر 49: سطر 50:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
===إنشاء الأصناف القابلة للإرسال===
+
==إنشاء الأصناف القابلة للإرسال==
 
في [[Laravel]]، كل نوع من الرسائل المرسلة من التطبيق تُمَثّل في صنف (class) قابل للإرسال "mailable". تُخزّن هذه الأصناف في المجلد <code>app/Mail</code>. لا تقلق إذا لم تجد المجلد في تطبيقك إذ سيصنع عندما تُنشِئ أول صنف قابل للإرسال باستعمال الأمر <code>make:mail</code>:<syntaxhighlight lang="php">
 
في [[Laravel]]، كل نوع من الرسائل المرسلة من التطبيق تُمَثّل في صنف (class) قابل للإرسال "mailable". تُخزّن هذه الأصناف في المجلد <code>app/Mail</code>. لا تقلق إذا لم تجد المجلد في تطبيقك إذ سيصنع عندما تُنشِئ أول صنف قابل للإرسال باستعمال الأمر <code>make:mail</code>:<syntaxhighlight lang="php">
 
php artisan make:mail OrderShipped
 
php artisan make:mail OrderShipped
 
</syntaxhighlight>
 
</syntaxhighlight>
===كتابة الأصناف القابلة لإرسال===
+
==كتابة الأصناف القابلة لإرسال==
 
يُضبَط الصنف القابل للإرسال في التابع <code>build</code>. في هذا التابع، يمكنك نداء عدّة عوامل مثل <code>from</code> و <code>subject</code> و <code>view</code> و <code>attach</code> لضبط طريقة التقديم والإرسال.
 
يُضبَط الصنف القابل للإرسال في التابع <code>build</code>. في هذا التابع، يمكنك نداء عدّة عوامل مثل <code>from</code> و <code>subject</code> و <code>view</code> و <code>attach</code> لضبط طريقة التقديم والإرسال.
====ضبط المرسل====
+
===ضبط المرسل===
=====استعمال التابع <code>from</code>=====
+
====استعمال التابع <code>from</code>====
 
لنبدأ أولا بضبط المرسِل، أو المكان الذي سيراه متلقي الرسالة كمصدر الإرسال. توجد طريقتان للقيام بهذا. أولًا، يمكنك استعمال التابع <code>from</code> داخل التابع <code>build</code> من الصنف القابل للإرسال:<syntaxhighlight lang="php">
 
لنبدأ أولا بضبط المرسِل، أو المكان الذي سيراه متلقي الرسالة كمصدر الإرسال. توجد طريقتان للقيام بهذا. أولًا، يمكنك استعمال التابع <code>from</code> داخل التابع <code>build</code> من الصنف القابل للإرسال:<syntaxhighlight lang="php">
 
/**
 
/**
سطر 72: سطر 73:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====استعمال عنوان عام <code>from</code>=====
+
====استعمال عنوان عام <code>from</code>====
 
في حالة كان للتطبيق عنوان واحد تُرسَل منه كل الرسائل، قد يصبح من غير المجدي نداء التابع <code>from</code> في كل صنف قابل للإرسال. عوض ذلك، يمكنك تحديد عنوان عام "from" في ملف الضبط <code>config/mail.php</code>. سيَستعمل هذا العنوان في حالة عدم ذكر عنوان خاص بالصنف القابل للإرسال<syntaxhighlight lang="php">
 
في حالة كان للتطبيق عنوان واحد تُرسَل منه كل الرسائل، قد يصبح من غير المجدي نداء التابع <code>from</code> في كل صنف قابل للإرسال. عوض ذلك، يمكنك تحديد عنوان عام "from" في ملف الضبط <code>config/mail.php</code>. سيَستعمل هذا العنوان في حالة عدم ذكر عنوان خاص بالصنف القابل للإرسال<syntaxhighlight lang="php">
 
'from' => ['address' => 'example@example.com', 'name' => 'App Name'],
 
'from' => ['address' => 'example@example.com', 'name' => 'App Name'],
 
</syntaxhighlight>
 
</syntaxhighlight>
====ضبط الواجهة====
+
===ضبط الواجهة===
 
في التابع <code>build</code> من الصنف القابل للإرسال، يمكن نداء التابع <code>view</code> لتحديد أي القوالب يجب استعمالها حين إظهار محتوى الرسائل. حيث تستعمل الرسائل في الغالب قوالب <code>Blade</code> لإظهار المحتوى، لك كل قوة وسهولة استخدام المحرك blade لبناء الرسالة:<syntaxhighlight lang="php">
 
في التابع <code>build</code> من الصنف القابل للإرسال، يمكن نداء التابع <code>view</code> لتحديد أي القوالب يجب استعمالها حين إظهار محتوى الرسائل. حيث تستعمل الرسائل في الغالب قوالب <code>Blade</code> لإظهار المحتوى، لك كل قوة وسهولة استخدام المحرك blade لبناء الرسالة:<syntaxhighlight lang="php">
 
/**
 
/**
سطر 90: سطر 91:
  
  
</syntaxhighlight><u>ملاحظة</u>: قد ترغب بإنشاء المجلد <code>resources/views/emails</code> ليحتوي على قوالب الرسائل، لكنك حرّ في أن تضع القوالب في أي مكان تريد في المجلد <code>resources/views</code>.
+
</syntaxhighlight>'''ملاحظة:''' قد ترغب بإنشاء المجلد <code>resources/views/emails</code> ليحتوي على قوالب الرسائل، لكنك حرّ في أن تضع القوالب في أي مكان تريد في المجلد <code>resources/views</code>.
=====البريد الإكتروني ذو النص العادي=====
+
====البريد الإلكتروني ذو النص العادي====
 
يمكنك تعريف نص عادي للرسالة باستعمال التابع <code>text</code>. مثل <code>view</code>، يقبل <code>text</code> اسم القالب الذي سيُستعمل لإظهار محتوى الرسالة. أنت حر في الإختيار بين النسخة العادية ونسخة HTML للرسالة:<syntaxhighlight lang="php">
 
يمكنك تعريف نص عادي للرسالة باستعمال التابع <code>text</code>. مثل <code>view</code>، يقبل <code>text</code> اسم القالب الذي سيُستعمل لإظهار محتوى الرسالة. أنت حر في الإختيار بين النسخة العادية ونسخة HTML للرسالة:<syntaxhighlight lang="php">
 
/**
 
/**
سطر 107: سطر 108:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
====إظهار البيانات====
+
===إظهار البيانات===
=====عبر الخصائص العمومية=====
+
====عبر الخصائص العمومية====
 
تحتاج في العادة لتمرير بعض البيانات للواجهة لاستعمالها حين إظهار الرسالة. هناك طريقتان لتوفير البيانات للواجهة. أولًا، كل خاصية عامة (public property) معَرّفة في الصنف القابل للإرسال تكون تلقائيًا متاحةً في الواجهة. لذا، يمكنك مثلا تمرير بيانات للتابع الباني في الصنف ثم إعطاء هذه البيانات للخاصيات العامة في الصنف:<syntaxhighlight lang="php">
 
تحتاج في العادة لتمرير بعض البيانات للواجهة لاستعمالها حين إظهار الرسالة. هناك طريقتان لتوفير البيانات للواجهة. أولًا، كل خاصية عامة (public property) معَرّفة في الصنف القابل للإرسال تكون تلقائيًا متاحةً في الواجهة. لذا، يمكنك مثلا تمرير بيانات للتابع الباني في الصنف ثم إعطاء هذه البيانات للخاصيات العامة في الصنف:<syntaxhighlight lang="php">
 
<?php
 
<?php
سطر 153: سطر 154:
 
</div>
 
</div>
 
</syntaxhighlight>
 
</syntaxhighlight>
=====عبر التابع <code>with</code>=====
+
====عبر التابع <code>with</code>====
 
يمكنك تمرير البيانات يدويًا للواجهة باستعمال التابع <code>with</code> إذا أردت تخصيص شكل البيانات قبل إرسالها للقالب. في العادة، ستحتاج لتمرير البيانات للتابع الباني للصنف القابل للإرسال، لكن عليك تغيير صفة البيانات إلى <code>protected</code> أو <code>private</code> حتى لا تكون متاحة تلقائيًا للقالب. ثمّ عند نداء التابع <code>with</code>، مرّر مصفوفة البيانات المتاحة للقالب:<syntaxhighlight lang="php">
 
يمكنك تمرير البيانات يدويًا للواجهة باستعمال التابع <code>with</code> إذا أردت تخصيص شكل البيانات قبل إرسالها للقالب. في العادة، ستحتاج لتمرير البيانات للتابع الباني للصنف القابل للإرسال، لكن عليك تغيير صفة البيانات إلى <code>protected</code> أو <code>private</code> حتى لا تكون متاحة تلقائيًا للقالب. ثمّ عند نداء التابع <code>with</code>، مرّر مصفوفة البيانات المتاحة للقالب:<syntaxhighlight lang="php">
 
<?php namespace App\Mail; use App\Order; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderShipped extends Mailable {
 
<?php namespace App\Mail; use App\Order; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderShipped extends Mailable {
سطر 193: سطر 194:
 
</div>
 
</div>
 
</syntaxhighlight>
 
</syntaxhighlight>
====المرفقات====
+
===المرفقات===
 
لإضافة مرفقات للرسالة، يُستعمل التابع <code>attach</code> في التابع <code>build</code> من الصنف. يقبل التابع مسارًا كاملًا للملف كمعامل أول:<syntaxhighlight lang="php">
 
لإضافة مرفقات للرسالة، يُستعمل التابع <code>attach</code> في التابع <code>build</code> من الصنف. يقبل التابع مسارًا كاملًا للملف كمعامل أول:<syntaxhighlight lang="php">
 
/**  
 
/**  
سطر 211: سطر 212:
 
  { return $this->view('emails.orders.shipped') ->attach('/path/to/file', [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ]); }
 
  { return $this->view('emails.orders.shipped') ->attach('/path/to/file', [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ]); }
 
</syntaxhighlight>
 
</syntaxhighlight>
=====إرفاق معلومات خام=====
+
====إرفاق معلومات خام====
 
يمكن استعمال التابع <code>attachData</code> لإرفاق معلومات خام في شكل سلسلة من البيانات الخام. مثلًا، يمكن استعمال هذا التابع لإحداث ملف PDF في الذاكرة و إرفاقها مباشرة بالرسالة دون تسجيلها في القرص الصلب. يقبل التابع <code>attachData</code> بايت (Bytes) من البيانات الخام كمعامل أول. اسم الملف كمعامل ثاني و مصفوفة خيارات كمعامل ثالث:<syntaxhighlight lang="php">
 
يمكن استعمال التابع <code>attachData</code> لإرفاق معلومات خام في شكل سلسلة من البيانات الخام. مثلًا، يمكن استعمال هذا التابع لإحداث ملف PDF في الذاكرة و إرفاقها مباشرة بالرسالة دون تسجيلها في القرص الصلب. يقبل التابع <code>attachData</code> بايت (Bytes) من البيانات الخام كمعامل أول. اسم الملف كمعامل ثاني و مصفوفة خيارات كمعامل ثالث:<syntaxhighlight lang="php">
 
/**  
 
/**  
سطر 222: سطر 223:
 
  ->attachData($this->pdf, 'name.pdf', [ 'mime' => 'application/pdf', ]); }
 
  ->attachData($this->pdf, 'name.pdf', [ 'mime' => 'application/pdf', ]); }
 
</syntaxhighlight>
 
</syntaxhighlight>
====المرفقات المُضمّنة====
+
===المرفقات المُضمّنة===
 
يكون تضمين صور في الرسائل في العادة عملية مرهقة وثقيلة، لكن [[Laravel]] يوفّر طريقة سهلة لإرفاق الصور بالرسائل واسترجاع رقم CID الملائم. لتضمين صورة، استعمل التابع <code>embed</code> على المتغيّر  <code>message$</code> في قالب الرسالة. يضيف [[Laravel]] تلقائيًا المتغيّر <code>message$</code> إلى القالب، لذا لا تحتاج لتمريره يدويًا:<syntaxhighlight lang="html">
 
يكون تضمين صور في الرسائل في العادة عملية مرهقة وثقيلة، لكن [[Laravel]] يوفّر طريقة سهلة لإرفاق الصور بالرسائل واسترجاع رقم CID الملائم. لتضمين صورة، استعمل التابع <code>embed</code> على المتغيّر  <code>message$</code> في قالب الرسالة. يضيف [[Laravel]] تلقائيًا المتغيّر <code>message$</code> إلى القالب، لذا لا تحتاج لتمريره يدويًا:<syntaxhighlight lang="html">
 
<body>
 
<body>
سطر 232: سطر 233:
  
 
</syntaxhighlight><u>تنبيه</u>: المتغير <code>message$</code> غير موجود في الرسائل المكتوبة بصيغة Markdown.
 
</syntaxhighlight><u>تنبيه</u>: المتغير <code>message$</code> غير موجود في الرسائل المكتوبة بصيغة Markdown.
=====تضمين مرفقات بيانات خام=====
+
====تضمين مرفقات بيانات خام====
 
إذا كان لديك معلومات بيانات خام تريد تضمينها في قالب الرسالة، يمكنك ذلك باستعمال التابع <code>embedData</code> على المتغيّر <code>message$</code>:<syntaxhighlight lang="html">
 
إذا كان لديك معلومات بيانات خام تريد تضمينها في قالب الرسالة، يمكنك ذلك باستعمال التابع <code>embedData</code> على المتغيّر <code>message$</code>:<syntaxhighlight lang="html">
 
<body>
 
<body>
سطر 242: سطر 243:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
====تخصيص رسائل SwiftMailer====
+
===تخصيص رسائل SwiftMailer===
 
يسمح التابع <code>withSwiftMessage</code> من الصنف الأصلي <code>Mailable</code> بتسجيل رد نداء يستدعى مع رسالة SwiftMAiler الخام قبل إرسال الرسالة. مما يعطيك إمكانية تخصيص و تكييف الرسالة قبل إرسالها:<syntaxhighlight lang="php">
 
يسمح التابع <code>withSwiftMessage</code> من الصنف الأصلي <code>Mailable</code> بتسجيل رد نداء يستدعى مع رسالة SwiftMAiler الخام قبل إرسال الرسالة. مما يعطيك إمكانية تخصيص و تكييف الرسالة قبل إرسالها:<syntaxhighlight lang="php">
 
  /**
 
  /**
سطر 258: سطر 259:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
===عناصر القابلة للإرسال Markdown===
+
==العناصر القابلة للإرسال Markdown==
 
تسمح لك رسائل Markdown باستغلال قوالب و مكوّنات مصنوعة سابقًا في الرسالة. حيث أنّ الرسائل مكتوبة بلغة Markdown، يتمكن Laravel من إظهار قوالب جميلة و متجاوبة للرسالة و صناعة نسخةِ نص عادي في نفس الوقت.
 
تسمح لك رسائل Markdown باستغلال قوالب و مكوّنات مصنوعة سابقًا في الرسالة. حيث أنّ الرسائل مكتوبة بلغة Markdown، يتمكن Laravel من إظهار قوالب جميلة و متجاوبة للرسالة و صناعة نسخةِ نص عادي في نفس الوقت.
====إنشاء أصناف Markdown====
+
===إنشاء أصناف Markdown===
 
لإنشاء أصناف قابلة للبعث Markdown، يمكن استعمال الخيار <code>markdown--</code> مع الأمر <code>make:mail</code>:<syntaxhighlight lang="php">
 
لإنشاء أصناف قابلة للبعث Markdown، يمكن استعمال الخيار <code>markdown--</code> مع الأمر <code>make:mail</code>:<syntaxhighlight lang="php">
 
php artisan make:mail OrderShipped --markdown=emails.orders.shipped  
 
php artisan make:mail OrderShipped --markdown=emails.orders.shipped  
سطر 277: سطر 278:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
====كتابة رسائل Markdown====
+
===كتابة رسائل Markdown===
 
تستعمل أصناف <code>Markdown</code> خليطًا من مكوّنات <code>Blade</code> ونص <code>Markdown</code> مما يسمح ببناء الرسالة بسهولة باستعمال المكوّنات الجاهزة:<syntaxhighlight lang="php">
 
تستعمل أصناف <code>Markdown</code> خليطًا من مكوّنات <code>Blade</code> ونص <code>Markdown</code> مما يسمح ببناء الرسالة بسهولة باستعمال المكوّنات الجاهزة:<syntaxhighlight lang="php">
 
@component('mail::message')
 
@component('mail::message')
سطر 292: سطر 293:
 
@endcomponent
 
@endcomponent
 
</syntaxhighlight><u>ملاحظة</u>: لا تكثر من استعمال الإزاحات فمحلّل اللغة في Markdown سيظهر النص ذا المساحات المُزاحة الكثيرة كنص شيفرة.
 
</syntaxhighlight><u>ملاحظة</u>: لا تكثر من استعمال الإزاحات فمحلّل اللغة في Markdown سيظهر النص ذا المساحات المُزاحة الكثيرة كنص شيفرة.
=====المكوّن button=====
+
====المكوّن button====
 
يُظهر المكوّن button زرَّ ربط في وسط الصفحة. يقبل المكوّن معاملَين: مسار <code>url</code> ولونًا اختياريًا <code>color</code>. الألوان المدعومة هي <code>blue</code> و <code>green</code> و <code>red</code>. يمكنك إضافة أي عدد من الأزرار تريد<syntaxhighlight lang="php">
 
يُظهر المكوّن button زرَّ ربط في وسط الصفحة. يقبل المكوّن معاملَين: مسار <code>url</code> ولونًا اختياريًا <code>color</code>. الألوان المدعومة هي <code>blue</code> و <code>green</code> و <code>red</code>. يمكنك إضافة أي عدد من الأزرار تريد<syntaxhighlight lang="php">
 
@component('mail::button', ['url' => $url, 'color' => 'green']) View Order @endcomponent  
 
@component('mail::button', ['url' => $url, 'color' => 'green']) View Order @endcomponent  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====المكوّن panel=====
+
====المكوّن panel====
 
يُظهر المكوّن Panel النص المُمرّر  كمجموعة بخلفية مختلفة قليلًا عن بقية الرسالة مما يسمح بجذب الانتباه لهذا النص:<syntaxhighlight lang="php">
 
يُظهر المكوّن Panel النص المُمرّر  كمجموعة بخلفية مختلفة قليلًا عن بقية الرسالة مما يسمح بجذب الانتباه لهذا النص:<syntaxhighlight lang="php">
 
@component('mail::panel') This is the panel content.
 
@component('mail::panel') This is the panel content.
سطر 304: سطر 305:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====المكوّن table=====
+
====المكوّن table====
 
يسمح المكوّن table بتحويل جدول Markdown لجدول HTML. يقبل المكوّن جدول Markdown كمحتوى ويدعم المحاذاة باستخدام تنسيق Markdown:<syntaxhighlight lang="text">
 
يسمح المكوّن table بتحويل جدول Markdown لجدول HTML. يقبل المكوّن جدول Markdown كمحتوى ويدعم المحاذاة باستخدام تنسيق Markdown:<syntaxhighlight lang="text">
 
@component('mail::table')
 
@component('mail::table')
سطر 314: سطر 315:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
====تخصيص المكوّنات====
+
===تخصيص المكوّنات===
 
يمكنك تحميل كل المكونات من Markdown في التطبيق لتخصيصها. لتحويل المكونات، استعمل الأمر <code>vendor:publish</code> لنشر الأصول laravel-mail:<syntaxhighlight lang="php">
 
يمكنك تحميل كل المكونات من Markdown في التطبيق لتخصيصها. لتحويل المكونات، استعمل الأمر <code>vendor:publish</code> لنشر الأصول laravel-mail:<syntaxhighlight lang="php">
 
php artisan vendor:publish --tag=laravel-mail  
 
php artisan vendor:publish --tag=laravel-mail  
 
</syntaxhighlight>سيُحمّل هذا الأمر مكونات <code>Markdown</code> في المجلد <code>resources/views/vendor/mail</code>. سيحتوي المجلد <code>mail</code> على المجلد <code>html</code> ومجلد <code>markdown</code>، كل منهما يحتوي على النسخة الملائمة من المكوّنات. تُستخدم المكونات في المجلد <code>html</code> لبناء نسخة html من الرسالة في حين تُستخدم المكونات من المجلد <code>Markdown</code> لبناء نسخة نص عادي. لك حرية تخصيص هذه المكونات كما تريد.
 
</syntaxhighlight>سيُحمّل هذا الأمر مكونات <code>Markdown</code> في المجلد <code>resources/views/vendor/mail</code>. سيحتوي المجلد <code>mail</code> على المجلد <code>html</code> ومجلد <code>markdown</code>، كل منهما يحتوي على النسخة الملائمة من المكوّنات. تُستخدم المكونات في المجلد <code>html</code> لبناء نسخة html من الرسالة في حين تُستخدم المكونات من المجلد <code>Markdown</code> لبناء نسخة نص عادي. لك حرية تخصيص هذه المكونات كما تريد.
=====تخصيص ال CSS=====
+
====تخصيص ال CSS====
 
بعد تحميل المكونات، يحتوي المجلد <code>resources/views/vendor/mail/html/themes</code> على ملف <code>css</code> المبدئي <code>default.css</code>. يمكنك تخصيص تخطيط CSS في هذا الملف وسيُضمّن تلقائيًا في عرض HTML لرسائل Markdown.
 
بعد تحميل المكونات، يحتوي المجلد <code>resources/views/vendor/mail/html/themes</code> على ملف <code>css</code> المبدئي <code>default.css</code>. يمكنك تخصيص تخطيط CSS في هذا الملف وسيُضمّن تلقائيًا في عرض HTML لرسائل Markdown.
  
<u>ملاحظة</u> : إذا أردت بناء نمط جديد لمكون Markdown، اكتب ملف <code>CSS</code> جديد في المجلد <code>html/themes</code> وغيّر الخيار <code>theme</code> في ملف الضبط <code>mail</code>.
+
'''ملاحظة''' : إذا أردت بناء نمط جديد لمكون Markdown، اكتب ملف <code>CSS</code> جديد في المجلد <code>html/themes</code> وغيّر الخيار <code>theme</code> في ملف الضبط <code>mail</code>.
===إرسال البريد الإلكتروني===
+
==إرسال البريد الإلكتروني==
 
لإرسال رسالة، استعمل التابع <code>to</code> من الواجهة الثابتة <code>Mail</code>. يقبل التابع <code>to</code> عنوانًا إلكترونيًا، أو نسخة من كائن مستخدم، أو مجموعة مستخدمين. إذا مرّرت كائنًا أو مجموعة كائنات، ستُستخدم الخاصيات <code>mail</code> و <code>name</code> من الكائن عند ضبط متلقي الرسالة. بعد ضبط المتلقي، يمكنك تمرير مثيل من الصنف للتابع <code>send</code>:<syntaxhighlight lang="php">
 
لإرسال رسالة، استعمل التابع <code>to</code> من الواجهة الثابتة <code>Mail</code>. يقبل التابع <code>to</code> عنوانًا إلكترونيًا، أو نسخة من كائن مستخدم، أو مجموعة مستخدمين. إذا مرّرت كائنًا أو مجموعة كائنات، ستُستخدم الخاصيات <code>mail</code> و <code>name</code> من الكائن عند ضبط متلقي الرسالة. بعد ضبط المتلقي، يمكنك تمرير مثيل من الصنف للتابع <code>send</code>:<syntaxhighlight lang="php">
 
<?php
 
<?php
سطر 360: سطر 361:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
===عرض الأصناف القابلة للإرسال===
+
==عرض الأصناف القابلة للإرسال==
 
قد تحتاج في بعض الأحيان لإظهار محتوى صنف قابل للإرسال دون إرساله، للقيام بهذا يمكن استعمال التابع <code>render</code>. يعيد هذا التابع النتيجة الحاصلة من الصنف على شكل سلسلة نصية:<syntaxhighlight lang="php">
 
قد تحتاج في بعض الأحيان لإظهار محتوى صنف قابل للإرسال دون إرساله، للقيام بهذا يمكن استعمال التابع <code>render</code>. يعيد هذا التابع النتيجة الحاصلة من الصنف على شكل سلسلة نصية:<syntaxhighlight lang="php">
 
$invoice = App\Invoice::find(1);
 
$invoice = App\Invoice::find(1);
سطر 368: سطر 369:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
====معاينة الأصناف في المتصفح====
+
===معاينة الأصناف في المتصفح===
 
عند تصميم قالب صنف قابل للإرسال، من المفيد أن تتمكن من معاينة نتيجة الصنف الممرّرة في المتصفح كأي قالب Blade. لهذا، يسمح Laravel بإعادة أي صنف قابل للإرسال من وحدات التحكم أو مسارات closure. عندما يعاد الصنف، سيُظهَر في المتصفح لمعاينة التصميم بسرعة دون الحاجة لإرسال الرسالة:<syntaxhighlight lang="php">
 
عند تصميم قالب صنف قابل للإرسال، من المفيد أن تتمكن من معاينة نتيجة الصنف الممرّرة في المتصفح كأي قالب Blade. لهذا، يسمح Laravel بإعادة أي صنف قابل للإرسال من وحدات التحكم أو مسارات closure. عندما يعاد الصنف، سيُظهَر في المتصفح لمعاينة التصميم بسرعة دون الحاجة لإرسال الرسالة:<syntaxhighlight lang="php">
 
Route::get('/mailable', function () {
 
Route::get('/mailable', function () {
سطر 378: سطر 379:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
====إضافة الرسائل لقائمة الإنتظار====
+
===إضافة الرسائل لطابور الإنتظار===
=====إضافة الرسالة=====
+
====إضافة الرسالة====
حيث يطوّل إرسال البريد الاكتروني وقت إجابة التطبيق، يختار العديد من المطوّرين إضافة الرسائل لقائمة انتظار لإرسالها في خلفية التطبيق. يُتيح Laravel إمكانية القيام هذا بسهولة باستخدام [https://laravel.com/docs/5.6/queues API Unified queue]. لإضافة الرسائل لقائمة الانتظار، استعمل التابع <code>queue</code> من الواجهة الثابتة <code>Mail</code> بعد تحديد متلقي الرسالة:<syntaxhighlight lang="php">
+
حيث يطوّل إرسال البريد الاكتروني وقت إجابة التطبيق، يختار العديد من المطوّرين إضافة الرسائل لطابور انتظار لإرسالها في خلفية التطبيق. يُتيح Laravel إمكانية القيام هذا بسهولة باستخدام [https://laravel.com/docs/5.6/queues API Unified queue]. لإضافة الرسائل لطابور الانتظار، استعمل التابع <code>queue</code> من الواجهة الساكنة <code>Mail</code> بعد تحديد متلقي الرسالة:<syntaxhighlight lang="php">
 
Mail::to($request->user())
 
Mail::to($request->user())
  
سطر 387: سطر 388:
 
   ->queue(new OrderShipped($order));
 
   ->queue(new OrderShipped($order));
  
</syntaxhighlight>سيتكفّل التابع بدفع مهمّة لقائمة الإنتظار تقوم بإرسال الرسالة في خلفية التطبيق. ستحتاج طبعًا لضبط قوائم الإنتظار قبل استعمال هذه الخاصية.
+
</syntaxhighlight>سيتكفّل التابع بدفع مهمّة لطابور الإنتظار تقوم بإرسال الرسالة في خلفية التطبيق. ستحتاج طبعًا لضبط طوابير الإنتظار قبل استعمال هذه الخاصية.
=====تأخير إضافة الرسالة=====
+
====تأخير إضافة الرسالة====
إذا أردت تأخير إرسال رسالة ما في قائمة الانتظار، استعمل التابع <code>later</code>. يقبل هذا التابع نسخة الكائن <code>DateTime</code> يوضّح وقت الإرسال<syntaxhighlight lang="php">
+
إذا أردت تأخير إرسال رسالة ما في طابور الانتظار، استعمل التابع <code>later</code>. يقبل هذا التابع نسخة الكائن <code>DateTime</code> يوضّح وقت الإرسال<syntaxhighlight lang="php">
 
$when = now()->addMinutes(10);
 
$when = now()->addMinutes(10);
  
سطر 401: سطر 402:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====الإضافة لقائمة انتظار معيّنة=====
+
====الإضافة لطابور انتظار معيّنة====
 
حيث أنّ كل الأصناف القابلة للإرسال تُصنع ياستعمال الأمر <code>mail:make</code> لخاصيات <code>Illuminate\Bus\Queueable</code>، يمكن استعمال التابعين <code>onQueue</code> و <code>onConnection</code> على أي نسخة لصنف قابل للإرسال. مما يسمح بتحديد الصلة وقائمة الانتظار لكل رسالة:<syntaxhighlight lang="php">
 
حيث أنّ كل الأصناف القابلة للإرسال تُصنع ياستعمال الأمر <code>mail:make</code> لخاصيات <code>Illuminate\Bus\Queueable</code>، يمكن استعمال التابعين <code>onQueue</code> و <code>onConnection</code> على أي نسخة لصنف قابل للإرسال. مما يسمح بتحديد الصلة وقائمة الانتظار لكل رسالة:<syntaxhighlight lang="php">
 
$message = (new OrderShipped($order))
 
$message = (new OrderShipped($order))
سطر 414: سطر 415:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====الإضافة المبدئية=====
+
====الإضافة المبدئية====
 
إذا كان لديك أصناف قابلة للإرسال تريد أن تضيفها دائمًا لقائمة الانتظار، يمكنك تنفيذ العقد ShouldQueue في الصنف. في هذه الحال، حتى إن ناديت التابع send للإرسال فإنّ الصنف سيضاف للقائمة باعتباره حاملًا للعقد:<syntaxhighlight lang="php">
 
إذا كان لديك أصناف قابلة للإرسال تريد أن تضيفها دائمًا لقائمة الانتظار، يمكنك تنفيذ العقد ShouldQueue في الصنف. في هذه الحال، حتى إن ناديت التابع send للإرسال فإنّ الصنف سيضاف للقائمة باعتباره حاملًا للعقد:<syntaxhighlight lang="php">
 
use Illuminate\Contracts\Queue\ShouldQueue;
 
use Illuminate\Contracts\Queue\ShouldQueue;
سطر 425: سطر 426:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
===الرسائل الإلكترونية والتطوير المحلي===
+
==الرسائل الإلكترونية والتطوير المحلي==
 
عند تطوير تطبيق، قد لا تريد إرسال بريد لعناوين حقيقية. يوفّر [[Laravel]] طرائق عديدة لتعطيل عملية الإرسال في مرحلة التطوير.
 
عند تطوير تطبيق، قد لا تريد إرسال بريد لعناوين حقيقية. يوفّر [[Laravel]] طرائق عديدة لتعطيل عملية الإرسال في مرحلة التطوير.
=====المشغل Log=====
+
===المشغل Log===
 
بدل إرسال الرسائل، يكتب المشغل <code>Log</code> محتوى الرسائل في ملف <code>log</code> لمعاينتها. لمزيد من المعلومات حول بيئة التطوير، تفقّد [https://laravel.com/docs/5.6/configuration#environment-configuration توثيق الضبط].
 
بدل إرسال الرسائل، يكتب المشغل <code>Log</code> محتوى الرسائل في ملف <code>log</code> لمعاينتها. لمزيد من المعلومات حول بيئة التطوير، تفقّد [https://laravel.com/docs/5.6/configuration#environment-configuration توثيق الضبط].
=====To عام=====
+
===To العام===
 
حل آخر يوفره [[Laravel]] هو ضبط متلقي عام تُرسل إليه كل الرسائل من التطبيق. بهذه الطريقة، ستُرسل كل الرسائل من التطبيق إلى العنوان محدّد بدل العنوان المذكور كمتلقي للرسالة. يمكن القيام بهذا باستعمال الخيار <code>to</code> في ملف الضبط <code>config/mail.php</code>:<syntaxhighlight lang="php">
 
حل آخر يوفره [[Laravel]] هو ضبط متلقي عام تُرسل إليه كل الرسائل من التطبيق. بهذه الطريقة، ستُرسل كل الرسائل من التطبيق إلى العنوان محدّد بدل العنوان المذكور كمتلقي للرسالة. يمكن القيام بهذا باستعمال الخيار <code>to</code> في ملف الضبط <code>config/mail.php</code>:<syntaxhighlight lang="php">
 
'to' => [
 
'to' => [
سطر 439: سطر 440:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
=====Mailtrap=====
+
===Mailtrap===
 
في الأخير يمكن استخدام خدمة مثل <code>Mailtrap</code> و المشغل <code>smtp</code> لإرسال الرسائل لعنوان وهمي حيث يمكنك رؤيتها من تطبيق رسائل حقيقي. تسمح هذه الطريقة بمعاينة الرسالة النهائية في قارئ رسائل <code>Mailtrap</code>.
 
في الأخير يمكن استخدام خدمة مثل <code>Mailtrap</code> و المشغل <code>smtp</code> لإرسال الرسائل لعنوان وهمي حيث يمكنك رؤيتها من تطبيق رسائل حقيقي. تسمح هذه الطريقة بمعاينة الرسالة النهائية في قارئ رسائل <code>Mailtrap</code>.
===الأحداث===
+
==الأحداث==
 
يطلق [[Laravel]] حدثين في عملية الإرسال. يُطلق الحدث <code>MessageSending</code> قبل إرسال الرسالة في حين يُطلق <code>MessageSent</code> بعد البعث. هذه الأحداث تُطلق حين إرسال الرسائل وليس حين إضافتها لقائمة الإنتظار. يمكنك تسجيل مستمعات لهذه الأحداث في الملف ُ<code>EventServiceProvider</code>:<syntaxhighlight lang="php">
 
يطلق [[Laravel]] حدثين في عملية الإرسال. يُطلق الحدث <code>MessageSending</code> قبل إرسال الرسالة في حين يُطلق <code>MessageSent</code> بعد البعث. هذه الأحداث تُطلق حين إرسال الرسائل وليس حين إضافتها لقائمة الإنتظار. يمكنك تسجيل مستمعات لهذه الأحداث في الملف ُ<code>EventServiceProvider</code>:<syntaxhighlight lang="php">
 
/**
 
/**
سطر 464: سطر 465:
 
== مصادر <span> </span> ==
 
== مصادر <span> </span> ==
 
*[https://laravel.com/docs/5.6/mail صفحة Mail في توثيق Laravel الرّسمي.]
 
*[https://laravel.com/docs/5.6/mail صفحة Mail في توثيق Laravel الرّسمي.]
[[تصنيف:Laravel]]
+
[[تصنيف:Laravel|{{SUBPAGENAME}}]]
[[تصنيف:Laravel Digging deeper]]
+
[[تصنيف:Laravel Digging deeper|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 14:08، 24 أكتوبر 2018

 مقدمة

يوفّر Laravel واجهة برمجية (API) سلسة و بسيطة للمكتبة الرائجة SwiftMailer مع برنامج تشغيل لكل من SMTP و Mailgun و SparkPost و Amazon SOS وتابع mail ، و sendmail. ممّا يسمح بالبداية في إرسال الرسائل الإكترونية بسرعة عبر خدمات محلية أو سحابية من اختيارك.

برامج التشغيل اللازمة

تكون برامج التشغيل المعتمدة على الوسائط مثل Mailgun و SparkPost في العادة أسرع وأسهل في الاستعمال من خوادم SMTP. استعمل أحد هذه برامج التشغيل إن أمكنك. تَستعمل كل المشغّلات التي تعتمد على الوسائط (API) المكتبة Guzzle التي يمكنك تثبيتها باستعمال منظم الحزم Composer.

composer require guzzlehttp/guzzle

برنامج التشغيل Mailgun

لاستخدام برنامج التشغيل Mailgun، أولًا ثبّت Guzzle ثمّ غير الخيار driver في ملف الضبط config/mail.php للقيمة mailgun. بعد ذلك، تثبت من أنّ ملف الضبط config/services.php يحتوي الخيار التالي:

'mailgun' => [

   'domain' => 'your-mailgun-domain',
   'secret' => 'your-mailgun-key',
],

برنامج التشغيل SparkPost

لاستخدام برنامج التشغيل SparkPost، أولا ثبّت Guzzle ثمّ غير الخيار driver في ملف الضبط config/mail.php للقيمة sparkpost. بعد ذلك، تثبت من أنّ ملف الضبط config/services.php يحتوي الخيار التالي:

'sparkpost' => [

   'secret' => 'your-sparkpost-key',
],

يمكن أيضًا ضبط نقطة نهاية الوسيط التي يجب استعمالها إن احتجت لذلك: '

sparkpost' => [

   'secret' => 'your-sparkpost-key',
   'options' => [
       'endpoint' => 'https://api.eu.sparkpost.com/api/v1/transmissions',
   ],
],

برنامج التشغيل SES

لاستخدام برنامج التشغيل Amazon SES يجب أولًا تثبيت Amazon AWS SDK الخاص بلغة PHP. يمكنك تثبيت المكتبة عبر إضافة السطر التالي للقسم require من الملف composer.json:

"aws/aws-sdk-php": "~3.0"

بعد ذلك غير الخيار driver في ملف الضبط config/mail.php إلى القيمة ses. ثمّ تثبت من أنّ ملف الضبط config/services.php يحتوي الخيار التالي:

'ses' => [

   'key' => 'your-ses-key',
   'secret' => 'your-ses-secret',
   'region' => 'ses-region', // e.g. us-east-1
],

إنشاء الأصناف القابلة للإرسال

في Laravel، كل نوع من الرسائل المرسلة من التطبيق تُمَثّل في صنف (class) قابل للإرسال "mailable". تُخزّن هذه الأصناف في المجلد app/Mail. لا تقلق إذا لم تجد المجلد في تطبيقك إذ سيصنع عندما تُنشِئ أول صنف قابل للإرسال باستعمال الأمر make:mail:

php artisan make:mail OrderShipped

كتابة الأصناف القابلة لإرسال

يُضبَط الصنف القابل للإرسال في التابع build. في هذا التابع، يمكنك نداء عدّة عوامل مثل from و subject و view و attach لضبط طريقة التقديم والإرسال.

ضبط المرسل

استعمال التابع from

لنبدأ أولا بضبط المرسِل، أو المكان الذي سيراه متلقي الرسالة كمصدر الإرسال. توجد طريقتان للقيام بهذا. أولًا، يمكنك استعمال التابع from داخل التابع build من الصنف القابل للإرسال:

/**

* بناء الرسالة
*
* @return $this
*/
public function build() {

   return $this->from('example@example.com')
               ->view('emails.orders.shipped');
}

استعمال عنوان عام from

في حالة كان للتطبيق عنوان واحد تُرسَل منه كل الرسائل، قد يصبح من غير المجدي نداء التابع from في كل صنف قابل للإرسال. عوض ذلك، يمكنك تحديد عنوان عام "from" في ملف الضبط config/mail.php. سيَستعمل هذا العنوان في حالة عدم ذكر عنوان خاص بالصنف القابل للإرسال

'from' => ['address' => 'example@example.com', 'name' => 'App Name'],

ضبط الواجهة

في التابع build من الصنف القابل للإرسال، يمكن نداء التابع view لتحديد أي القوالب يجب استعمالها حين إظهار محتوى الرسائل. حيث تستعمل الرسائل في الغالب قوالب Blade لإظهار المحتوى، لك كل قوة وسهولة استخدام المحرك blade لبناء الرسالة:

/**

* بناء الرسالة
*
* @return $this
*/
public function build() {

   return $this->view('emails.orders.shipped');
}

ملاحظة: قد ترغب بإنشاء المجلد resources/views/emails ليحتوي على قوالب الرسائل، لكنك حرّ في أن تضع القوالب في أي مكان تريد في المجلد resources/views.

البريد الإلكتروني ذو النص العادي

يمكنك تعريف نص عادي للرسالة باستعمال التابع text. مثل view، يقبل text اسم القالب الذي سيُستعمل لإظهار محتوى الرسالة. أنت حر في الإختيار بين النسخة العادية ونسخة HTML للرسالة:

/**

* بناء الرسالة
*
* @return $this
*/
public function build() {

   return $this->view('emails.orders.shipped')
               ->text('emails.orders.shipped_plain');
}

إظهار البيانات

عبر الخصائص العمومية

تحتاج في العادة لتمرير بعض البيانات للواجهة لاستعمالها حين إظهار الرسالة. هناك طريقتان لتوفير البيانات للواجهة. أولًا، كل خاصية عامة (public property) معَرّفة في الصنف القابل للإرسال تكون تلقائيًا متاحةً في الواجهة. لذا، يمكنك مثلا تمرير بيانات للتابع الباني في الصنف ثم إعطاء هذه البيانات للخاصيات العامة في الصنف:

<?php

namespace App\Mail;

use App\Order; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels;

class OrderShipped extends Mailable

{

   use Queueable, SerializesModels;
   /**
    * خاصية الترتيب 
    *
    * @var Order
    */
   public $order;
   /**
    * صناعة نسخة من الرسالة
    *
    * @return void
    */
   public function __construct(Order $order)
   {
       $this->order = $order;
   }
   /**
    *بناء الرسالة
    *
    * @return $this
    */
   public function build()
   {
       return $this->view('emails.orders.shipped');
   }
}

بعد ضبط البيانات، ستكون متاحة للاستعمال في الواجهة ويمكنك الوصول إليها كبقية البيانات في قوالب blade:

<div>
    Price: {{ $order->price }}
</div>

عبر التابع with

يمكنك تمرير البيانات يدويًا للواجهة باستعمال التابع with إذا أردت تخصيص شكل البيانات قبل إرسالها للقالب. في العادة، ستحتاج لتمرير البيانات للتابع الباني للصنف القابل للإرسال، لكن عليك تغيير صفة البيانات إلى protected أو private حتى لا تكون متاحة تلقائيًا للقالب. ثمّ عند نداء التابع with، مرّر مصفوفة البيانات المتاحة للقالب:

<?php namespace App\Mail; use App\Order; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderShipped extends Mailable {

   use Queueable, SerializesModels;
   /**
    * خاصية الترتيب.
    *
    * @var Order
    */
   protected $order;
   /**
    * صناعة الرسالة.
    *
    * @return void
    */
   public function __construct(Order $order)
   {
       $this->order = $order;
   }
   /**
    *
    * @return $this
    */
   public function build()
   {
       return $this->view('emails.orders.shipped')
                   ->with([
                       'orderName' => $this->order->name,
                       'orderPrice' => $this->order->price,
                   ]);
   }
}

بعد ضبط البيانات، ستكون متاحةً للاستعمال في الواجهة ويمكنك ولوجها كبقية البيانات في قوالب blade

<div>
    Price: {{ $order->price }}
</div>

المرفقات

لإضافة مرفقات للرسالة، يُستعمل التابع attach في التابع build من الصنف. يقبل التابع مسارًا كاملًا للملف كمعامل أول:

/** 
* بناء الرسالة 
* 
* @return $this
*/ 
public function build() 
{ return $this->view('emails.orders.shipped') ->attach('/path/to/file'); }

عند إرفاق ملف مع الرسالة، يمكنك تحديد اسم أو نوع MIME بتمرير مصفوفة كمعامل ثاني للتابع attach:

/**
 * بناء الرسالة.
 * 
 * @return $this
 */
 public function build()
 { return $this->view('emails.orders.shipped') ->attach('/path/to/file', [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ]); }

إرفاق معلومات خام

يمكن استعمال التابع attachData لإرفاق معلومات خام في شكل سلسلة من البيانات الخام. مثلًا، يمكن استعمال هذا التابع لإحداث ملف PDF في الذاكرة و إرفاقها مباشرة بالرسالة دون تسجيلها في القرص الصلب. يقبل التابع attachData بايت (Bytes) من البيانات الخام كمعامل أول. اسم الملف كمعامل ثاني و مصفوفة خيارات كمعامل ثالث:

/** 
* بناء الرسالة. 
* 
* @return $this 
*/ 
public function build()
 { return $this->view('emails.orders.shipped')
 ->attachData($this->pdf, 'name.pdf', [ 'mime' => 'application/pdf', ]); }

المرفقات المُضمّنة

يكون تضمين صور في الرسائل في العادة عملية مرهقة وثقيلة، لكن Laravel يوفّر طريقة سهلة لإرفاق الصور بالرسائل واسترجاع رقم CID الملائم. لتضمين صورة، استعمل التابع embed على المتغيّر message$ في قالب الرسالة. يضيف Laravel تلقائيًا المتغيّر message$ إلى القالب، لذا لا تحتاج لتمريره يدويًا:

<body>

   هنا صورة : 
   <img src="{{ $message->embed($pathToFile) }}">
</body>

تنبيه: المتغير message$ غير موجود في الرسائل المكتوبة بصيغة Markdown.

تضمين مرفقات بيانات خام

إذا كان لديك معلومات بيانات خام تريد تضمينها في قالب الرسالة، يمكنك ذلك باستعمال التابع embedData على المتغيّر message$:

<body>

   هنا صورة من بيانات خام:
   <img src="{{ $message->embedData($data, $name) }}">
</body>

تخصيص رسائل SwiftMailer

يسمح التابع withSwiftMessage من الصنف الأصلي Mailable بتسجيل رد نداء يستدعى مع رسالة SwiftMAiler الخام قبل إرسال الرسالة. مما يعطيك إمكانية تخصيص و تكييف الرسالة قبل إرسالها:

 /**
    *  
    * @return $this
    */
   public function build()
   {
       $this->view('emails.orders.shipped');
       $this->withSwiftMessage(function ($message) {
           $message->getHeaders()
                   ->addTextHeader('Custom-Header', 'HeaderValue');
       });
   }

العناصر القابلة للإرسال Markdown

تسمح لك رسائل Markdown باستغلال قوالب و مكوّنات مصنوعة سابقًا في الرسالة. حيث أنّ الرسائل مكتوبة بلغة Markdown، يتمكن Laravel من إظهار قوالب جميلة و متجاوبة للرسالة و صناعة نسخةِ نص عادي في نفس الوقت.

إنشاء أصناف Markdown

لإنشاء أصناف قابلة للبعث Markdown، يمكن استعمال الخيار markdown-- مع الأمر make:mail:

php artisan make:mail OrderShipped --markdown=emails.orders.shipped

ثم عند ضبط الصنف في التابع build، استعمل markdown بدل view. يقبل التابع markdown اسم قالب Markdown ومصفوفة اختيارية من البيانات لإتاحتها للقالب:

/**

*
* @return $this
*/
public function build() {

   return $this->from('example@example.com')
               ->markdown('emails.orders.shipped');
}

كتابة رسائل Markdown

تستعمل أصناف Markdown خليطًا من مكوّنات Blade ونص Markdown مما يسمح ببناء الرسالة بسهولة باستعمال المكوّنات الجاهزة:

@component('mail::message')
# Order Shipped

Your order has been shipped!

@component('mail::button', ['url' => $url])
View Order
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

ملاحظة: لا تكثر من استعمال الإزاحات فمحلّل اللغة في Markdown سيظهر النص ذا المساحات المُزاحة الكثيرة كنص شيفرة.

المكوّن button

يُظهر المكوّن button زرَّ ربط في وسط الصفحة. يقبل المكوّن معاملَين: مسار url ولونًا اختياريًا color. الألوان المدعومة هي blue و green و red. يمكنك إضافة أي عدد من الأزرار تريد

@component('mail::button', ['url' => $url, 'color' => 'green']) View Order @endcomponent

المكوّن panel

يُظهر المكوّن Panel النص المُمرّر كمجموعة بخلفية مختلفة قليلًا عن بقية الرسالة مما يسمح بجذب الانتباه لهذا النص:

@component('mail::panel') This is the panel content.

@endcomponent

المكوّن table

يسمح المكوّن table بتحويل جدول Markdown لجدول HTML. يقبل المكوّن جدول Markdown كمحتوى ويدعم المحاذاة باستخدام تنسيق Markdown:

@component('mail::table')
| Laravel       | Table              | Example  |
| ---------------|:-----------------:| ------------:|
| Col 2 is       | Centered       | $10          |
| Col 3 is       | Right-Aligned| $20          |
@endcomponent

تخصيص المكوّنات

يمكنك تحميل كل المكونات من Markdown في التطبيق لتخصيصها. لتحويل المكونات، استعمل الأمر vendor:publish لنشر الأصول laravel-mail:

php artisan vendor:publish --tag=laravel-mail

سيُحمّل هذا الأمر مكونات Markdown في المجلد resources/views/vendor/mail. سيحتوي المجلد mail على المجلد html ومجلد markdown، كل منهما يحتوي على النسخة الملائمة من المكوّنات. تُستخدم المكونات في المجلد html لبناء نسخة html من الرسالة في حين تُستخدم المكونات من المجلد Markdown لبناء نسخة نص عادي. لك حرية تخصيص هذه المكونات كما تريد.

تخصيص ال CSS

بعد تحميل المكونات، يحتوي المجلد resources/views/vendor/mail/html/themes على ملف css المبدئي default.css. يمكنك تخصيص تخطيط CSS في هذا الملف وسيُضمّن تلقائيًا في عرض HTML لرسائل Markdown.

ملاحظة : إذا أردت بناء نمط جديد لمكون Markdown، اكتب ملف CSS جديد في المجلد html/themes وغيّر الخيار theme في ملف الضبط mail.

إرسال البريد الإلكتروني

لإرسال رسالة، استعمل التابع to من الواجهة الثابتة Mail. يقبل التابع to عنوانًا إلكترونيًا، أو نسخة من كائن مستخدم، أو مجموعة مستخدمين. إذا مرّرت كائنًا أو مجموعة كائنات، ستُستخدم الخاصيات mail و name من الكائن عند ضبط متلقي الرسالة. بعد ضبط المتلقي، يمكنك تمرير مثيل من الصنف للتابع send:

<?php

namespace App\Http\Controllers;

use App\Order;
use App\Mail\OrderShipped;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Http\Controllers\Controller;

class OrderController extends Controller
{
    /**
     * Ship the given order.
     *
     * @param  Request  $request
     * @param  int  $orderId
     * @return Response
     */
    public function ship(Request $request, $orderId)
    {
        $order = Order::findOrFail($orderId);

       // Ship order...

        Mail::to($request->user())->send(new OrderShipped($order));
    }
}

طبعًا لست محدودًا باستعمال to لضبط المتلقي، يمكنك أيضا ضبط cc و bcc في نداء واحد:

Mail::to($request->user())

   ->cc($moreUsers)
   ->bcc($evenMoreUsers)
   ->send(new OrderShipped($order));

عرض الأصناف القابلة للإرسال

قد تحتاج في بعض الأحيان لإظهار محتوى صنف قابل للإرسال دون إرساله، للقيام بهذا يمكن استعمال التابع render. يعيد هذا التابع النتيجة الحاصلة من الصنف على شكل سلسلة نصية:

$invoice = App\Invoice::find(1);

return (new App\Mail\InvoicePaid($invoice))->render();

معاينة الأصناف في المتصفح

عند تصميم قالب صنف قابل للإرسال، من المفيد أن تتمكن من معاينة نتيجة الصنف الممرّرة في المتصفح كأي قالب Blade. لهذا، يسمح Laravel بإعادة أي صنف قابل للإرسال من وحدات التحكم أو مسارات closure. عندما يعاد الصنف، سيُظهَر في المتصفح لمعاينة التصميم بسرعة دون الحاجة لإرسال الرسالة:

Route::get('/mailable', function () {

   $invoice = App\Invoice::find(1);
   return new App\Mail\InvoicePaid($invoice);
});

إضافة الرسائل لطابور الإنتظار

إضافة الرسالة

حيث يطوّل إرسال البريد الاكتروني وقت إجابة التطبيق، يختار العديد من المطوّرين إضافة الرسائل لطابور انتظار لإرسالها في خلفية التطبيق. يُتيح Laravel إمكانية القيام هذا بسهولة باستخدام API Unified queue. لإضافة الرسائل لطابور الانتظار، استعمل التابع queue من الواجهة الساكنة Mail بعد تحديد متلقي الرسالة:

Mail::to($request->user())

   ->cc($moreUsers)
   ->bcc($evenMoreUsers)
   ->queue(new OrderShipped($order));

سيتكفّل التابع بدفع مهمّة لطابور الإنتظار تقوم بإرسال الرسالة في خلفية التطبيق. ستحتاج طبعًا لضبط طوابير الإنتظار قبل استعمال هذه الخاصية.

تأخير إضافة الرسالة

إذا أردت تأخير إرسال رسالة ما في طابور الانتظار، استعمل التابع later. يقبل هذا التابع نسخة الكائن DateTime يوضّح وقت الإرسال

$when = now()->addMinutes(10);

Mail::to($request->user())

   ->cc($moreUsers)
   ->bcc($evenMoreUsers)
   ->later($when, new OrderShipped($order));

الإضافة لطابور انتظار معيّنة

حيث أنّ كل الأصناف القابلة للإرسال تُصنع ياستعمال الأمر mail:make لخاصيات Illuminate\Bus\Queueable، يمكن استعمال التابعين onQueue و onConnection على أي نسخة لصنف قابل للإرسال. مما يسمح بتحديد الصلة وقائمة الانتظار لكل رسالة:

$message = (new OrderShipped($order))

               ->onConnection('sqs')
               ->onQueue('emails');
Mail::to($request->user())

   ->cc($moreUsers)
   ->bcc($evenMoreUsers)
   ->queue($message);

الإضافة المبدئية

إذا كان لديك أصناف قابلة للإرسال تريد أن تضيفها دائمًا لقائمة الانتظار، يمكنك تنفيذ العقد ShouldQueue في الصنف. في هذه الحال، حتى إن ناديت التابع send للإرسال فإنّ الصنف سيضاف للقائمة باعتباره حاملًا للعقد:

use Illuminate\Contracts\Queue\ShouldQueue;

class OrderShipped extends Mailable implements ShouldQueue {

  //
}

الرسائل الإلكترونية والتطوير المحلي

عند تطوير تطبيق، قد لا تريد إرسال بريد لعناوين حقيقية. يوفّر Laravel طرائق عديدة لتعطيل عملية الإرسال في مرحلة التطوير.

المشغل Log

بدل إرسال الرسائل، يكتب المشغل Log محتوى الرسائل في ملف log لمعاينتها. لمزيد من المعلومات حول بيئة التطوير، تفقّد توثيق الضبط.

To العام

حل آخر يوفره Laravel هو ضبط متلقي عام تُرسل إليه كل الرسائل من التطبيق. بهذه الطريقة، ستُرسل كل الرسائل من التطبيق إلى العنوان محدّد بدل العنوان المذكور كمتلقي للرسالة. يمكن القيام بهذا باستعمال الخيار to في ملف الضبط config/mail.php:

'to' => [

   'address' => 'example@example.com',
   'name' => 'Example'
],

Mailtrap

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

الأحداث

يطلق Laravel حدثين في عملية الإرسال. يُطلق الحدث MessageSending قبل إرسال الرسالة في حين يُطلق MessageSent بعد البعث. هذه الأحداث تُطلق حين إرسال الرسائل وليس حين إضافتها لقائمة الإنتظار. يمكنك تسجيل مستمعات لهذه الأحداث في الملف ُEventServiceProvider:

/**

* المستمعات على الأحداث في التطبيق
*
* @var array
*/
protected $listen = [

   'Illuminate\Mail\Events\MessageSending' => [
       'App\Listeners\LogSendingMessage',
   ],
   'Illuminate\Mail\Events\MessageSent' => [
       'App\Listeners\LogSentMessage',
   ],
];

مصادر