إرسال الرسائل في لارافيل 8 ليس بالأمر المعقد، بالأخص إذا كنا نستخدم markdown لتنسيق شكل البريد المرسل، في هذه المقالة سنمضي خطوه بخطوه عن كيفية إرسال البريد الإلكتروني وإستخدام قوالب markdown.
كي يتم إرسال البريد الإلكتروني فإننا بحاجة لأحد مزودي خدمة إرسال البريد الإلكتروني ولحسن الحظ توفر لارافيل مجموعة من الخيارات مثل Mailtrap, Mailgun.......
لفرض أن لدي الفورم التالي لإرسال الرسائل
يتم التعامل مع الفورم أعلاه مثله مثل أي فورم إعتيادي في لارافيل، حيث يجب إنشاء route و method في الكونترولر
Route::post('/send', [EmailController::class,'send'])->name('send');
public function send(Request $request){ $email['email_title'] = $request->email_title; $email['email_body'] = $request->email_body; Mail::to($request->email_to) ->send(new SendEmail($email)); }
نلاحظ في الكورنترولر إننا إستخدمنا دالة Mail ، وتم تمرير لها المرسل له، لكن السؤال ما هي new SendEmail؟
من أجل إرسال بريد إلكتروني في لارفيل ٨ وإستخدام markdown، فإننا بحاجة إلى two services وهما:-
يمكن إنشاء mailable class مع markdown template بإستخدام الأمر التالي
php artisan make:mail SendEail --markdown=emails.sendEmail
بعد تنفيذ الأمر، سيتم إنشاء ما يلي :
class SendEail extends Mailable { use Queueable, SerializesModels; public function __construct() { // } public function build() { return $this->markdown('emails.sendEmail'); } }
@component('mail::message') # Introduction The body of your message. @component('mail::button', ['url' => '']) Button Text @endcomponent Thanks,<br> {{ config('app.name') }} @endcomponent
كما نلاحظ في الكلاس SendEmail أنه يحتوي على constructor و دالة build وهي التي ترجع لنا الملف sendEmail.blade.php الذي يحتوي على التنسيقات.
الأن نريد تمرير المتغيرات (أسماء الحقول)، إلى هذه الدالة
class SendEmail extends Mailable { use Queueable, SerializesModels; public $email; public function __construct($email) { $this->email=$email; } public function build() { $subject=$this->email['email_title']; return $this->markdown('emails.sendEmail') ->subject($subject) ->with([ 'email'=>$this->email ]); return $this->markdown('emails.sendEmail'); } }
إستقبال المتغيرات في ملف blade
@component('mail::message') # {{ $email['email_title'] }} {{ $email['email_body'] }} Thanks,<br> {{ config('app.name') }} @endcomponent
كما نشاهد بالأعلى أنه يمكننا إزالة بعض العناصر من markdown template وكذلك إضافة بعض الخواص التي سيتم شرحها لاحقا.
إستخدام خدمة Gmail SMTP
بداية يجب الذهاب إلى الحساب الذي سيتم الإرسال منه وتعطيل بعض إعدادات الأمان وهي:
الذهاب لملف .env وتسجيل إعدادات إرسال البريد الإلكتروني عن طريق Gmail SMTP
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=ethartest@gmail.com
MAIL_PASSWORD=your_gmail_password_here
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
كذلك لا ننسى تعديل قيمة APP_NAME هنا سأقوم بتغييرها من Laravel إلى EtharShrouf
الأن بإمكاننا إرسال رسائل البريد الإلكتروني بإستخدام خدمة جوجل smtp.
إرسال رسائل البريد الإلكتروني بإسم موقعك/شركتك من خلال معلومات cpanel
MAIL_MAILER=smtp MAIL_HOST=mail.etharshrouf.com MAIL_PORT=465 MAIL_USERNAME=help@etharshrouf.com MAIL_PASSWORD=21520000@1212 MAIL_ENCRYPTION=SSL MAIL_FROM_ADDRESS=help@etharshrouf.com MAIL_FROM_NAME="${APP_NAME}"
كذلك لا ننسى تعديل قيمة APP_NAME هنا سأقوم بتغييرها من Laravel إلى EtharShrouf
شكل البريد المرسل
بعض الـعناصر Components المعرفة مسبقا في Markdown Email
في التوثيق الخاص بموقع Laravel تم شرح بعض العناصر المبنية مسبقا وأهمها
@component('mail::message') # Heading 1 ## Heading 2 ### Heading 3 #### Heading 4 ##### Heading 5 ###### Heading 6 This is a sentence This is a sentence with **bolded text**. @component('mail::button', ['url' => '', 'color' => 'success']) Button One @endcomponent @component('mail::button', ['url' => '', 'color' => 'primary']) Button Two @endcomponent @component('mail::panel') This is the panel content. @endcomponent @component('mail::table') | Items | Quantity | Total Price | | ------------------|:---------:|-------------:| | Apple Iphone 10x | 1 Nos | $1200.00 | | Backcase cover | 2 Nos | $15.00 | | Total | 3 Nos | $1215.00 | @endcomponent Thanks, {{ config('app.name') }} @endcomponent
للتحكم أكثر في markdown يمكن التوجة للموقع https://dillinger.io/ وتصميم الشكل الذي نراه مناسباً .
ومن لا يرغب أو يجد صعوبة في إستخدام markdown يمكنه الإستعانة بموقع https://bootstrapemail.com/ حيث يعتمد بالتصميم على كلاسات البوتستراب.
👏✌✌✌😘😘😘
زائر
اسلوب شرح رائع وسهل