طريقة ارسال ايميلات عبر لارفل

طريقة ارسال ايميلات عبر لارفل

يعد إرسال بريد إلكتروني أحد أكثر الميزات شيوعًا التي يقدمها كل تطبيق ويب. تستخدم بعض مواقع الويب ميزة البريد الإلكتروني الخاصة بها لإرسال رسائل إخبارية أو رسائل تذكيرية, قد تستخدم بعض المواقع خدمة البريد الالكتروني لارسال الاشعارات للمستخدمين, و العديد من الاستخدامات الأخرى.

عادة ما يتم استخدام دالة mail() لارسال الايميلات الى المستخدمين, تكمن المشكلة في هذه الطريقة بأنها لا تضمن دائماً وصول الايميل الى المستخدمين كما أنها ليست طريقة آمنة او محبذة للعمل خصوصاً في المشاريع الكبيرة.

لماذا يجب عليك استخدام Laravel في ارسال الايميلات؟

استخدامك لاطار عمل لارافل يوفر عدة مميزات لارسال الايميلات منها:

1- استخدام بروتوكول SMTP لارسال الايميلات

2- انشاء خط انتظار Queue للايميلات لتحسين سرعة الصفحة

3- استخدام Markdown في كتابة الايميلات مما يساعدك على تصميم ايميلات جميلة بأقل مجهود

4- يمكنك ارفاق ملفات في الايميل بسهولة

5- يمكنك ارسال الايميل بناء على لغة الموقع (عربي , انجليزي ...الخ)

طريقة ارسال ايميلات عبر لارافل

سنبدأ بانشاء مشروع بسيط يقوم بارسال ايميل عبر لارفل لعنوان بريد الكتروني من اختيار المستخدم, لنبدأ معاً.

تنصيب مشروع لارافل جديد على جهازك

ان لم تقم بذلك مسبقاً, يمكنك انشاء مشروع لارافل جديد عبر كتابة الأمر التالي في سطر الأوامر:

 

composer create-project laravel/laravel mail-sender

يوجد عدة طرق أخرى لانشاء مشروع لارافل يمكنك الاطلاع عليها من مقالنا: ما هو Laravel لارافل ؟ تعرف على أهم اطار عمل للغة PHP او من Laravel Docs

انشاء Mailable جديد في المشروع

بعد أن قمت بانشاء مشروع جديد, عليك الآن انشاء ما يسمى ب Mailable في لارفل, و ال Mailable هو كلاس مكتوب بلغة php يمكنك عن طريقه تعريف الايميلات و ارسالها, يمكنك انشاء Mailable عبر كتابة الأمر التالي في سطر الأوامر , تأكد أولاً انك ضمن مجلد المشروع , يمكنك الانتقال من مجلد لاخر في سطر الاوامر عبر الأمر cd

 

php artisan make:mail WelcomeNewUser --markdown=emails/users/welcome-new-user

في الأمر السابق قمنا بانشاء Mailable باسم WelcomeNewUser و قمنا بربطه مع welcome-new-user , و قد قمنا باضافة الأمر --markdown كي نستطيع كتابة الايميل باستخدام Markdown , في حال لم تكن ترغب باستخدام Markdown في الايميل فبامكانك ازالة الأمر --markdown كلياً

الأمر السابق سيقوم بانشاء ملف باسم WelcomeNewUser.php في المسار : app\Mail , ستجد في هذا المسار جميع ال Mailables الخاصة بمشروعك , و باعتبار اننا استخدمنا الأمر --markdown فسنجد أيضاً ملف آخر باسم welcome-new-user.blade.php ضمن المسار : resources/views/emails/users/.

و ربما السؤال الذي يخطر في بالك الآن, ما هو الفرق بين الملفين؟ اليك الاجابة:

يحتوي ملف welcome-new-user.blade.php  على محتوى الايميل المرسل , لنقل على سبيل المثال أنك تريد تضمين جملة "مرحباً بالعالم" في الايميل الذي سيصل الى المستخدم فستقوم بكتابتها في ملف welcome-new-user.blade.php لان محتوى هذا الملف هو ما يتم ارساله الى المستخدم في النهاية , أما ملف WelcomeNewUser.php فهو الكلاس الذي يتم تشغيله لارسال الايميل الى المستخدم , و المحتوى المكتوب فيه لايصل الى المستخدم فعلياً , فيمكن القول انه ملف ال Back end في حين ملف welcome-new-user.blade.php هو ملف ال Front end

مقال مرتبط: ما الفرق بين Front End و Back End في تطوير الويب ؟

تصميم شكل الايميل المرسل الى المستخدم

لنبدأ الآن في تصميم الايميل الذي نريد ارساله الى المستخدم , افتح ملف welcome-new-user.blade.php في محرر الكود الذي تفضله و اكتب التالي:

 

@component('mail::message')
# Welcome New User!
Hello there {{$Data['username']}}, Welcome to our site!

@component('mail::button', ['url' => 'http://yoursite.com'])
Click here to check the site
@endcomponent

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

كما تشاهد في الكود, سيقوم موقعنا بارسال ايميل ترحيبي بالمستخدم , وقمنا أيضاً بتضمين اسم المستخدم لتوضيح فكرة ارسال متغيرات الى الايميل التي تفتح أمامك الكثير من الاحتمالات في نوع الايميلات التي يمكنك ارسالها!

تجهيز ال Maillable بالبيانات المطلوبة

الان سنقوم بتعديلات بسيطة في ملف ال Mailable المسؤول عن ارسال الايميل للمستخدم و تضمين اسم المستخدم هناك , افتح ملف WelcomeNewUser.php و اكتب الكود التالي:

 

<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class WelcomeNewUser extends Mailable{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public $Data;
    public function __construct($Data)
    {
        $this->Data = $Data;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('emails.users.welcome-new-user');
    }
}

كما هو واضح من الكود, الأمر الوحيد الذي قمنا به هنا هو استقبال متغير باسم Data و اضافته الى الدالة construct , الان نحن جاهزون لارسال ايميل الى المستخدم الذي نريده! سنقوم بانشاء صفحة جديدة بداخلها عنصر <form> لادخال اسم المستخدم و البريد الإلكتروني الذي سيتم الارسال اليه , قم بانشاء ملف باسم send.blade.php و قم بكتابة الكود التالي:

<form action="{{route('send')}}" method="post">
  @csrf
  <input type="text" name="name" placeholder="Please enter your name">
  <br>
  <input type="email" name="email" placeholder="Please enter your email">
</form>

و الآن في ملف web.php سنقوم بتعريف ال routes المطلوبة

Route::get('send' , '[email protected]')->name('send.get');
Route::post('send' , '[email protected]')->name('send');

اذاً , لنراجع سريعاً الأكواد السابقة:

أولاً قمنا بانشاء صفحة html بسيطة لعرض ال form التي سنقوم باستخدامها لاراسال الايميلات, وسنقوم بادخال اسم ليتم عرضه في الايميل و بريد الكتروني ليتم الارسال اليه , و بعد ذلك قمنا بانشاء ال Routes المطلوبة لعرض الصفحة GET و معالجة البيانات POST.

تبقى لنا الآن خطوتين, تحديد اعدادات ارسال الايميل في لارافل و ارسال الايميل فعلياً , لنبدأ أولاً بالاعدادات.

تعديل ملف .env وادخال الاعدادت المطلوبة

كي يستطيع لارافل ارسال ايميلات, علينا أولاً تحديد البروتوكول و السيرفر الذي سنقوم بالارسال عن طريقه , يوجد الكثير من الطرق و لكن لارافل ترجع استخدام بروتوكول SMTP و استخدام شركة Mailgun كموفر لخدمة SMTP , بكل الأحوال يمكنك التعاون مع الشركة التي تفضلها , لكنك ستحتاج في النهاية ل 4 معلومات أساسية, افتح ملف .env في مشروعك للاطلاع على هذه البيانات:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=587
MAIL_USERNAME=username_here
MAIL_PASSWORD=password_here

هذه هي البيانات الأساسية لارسال الايميلات في لارافل, MAIL_DRIVER سيكون دائماً smtp بغض النظر عن الشركة التي سوف تشتري منها خدمة SMTP , باقي البيانات هي المتغيرات و ستحصل عليها من الشركة التي ستقوم بالشراء منها , كما يمكنك استخدام Mailtrap خلال فترة التطوير لتجربة الايميلات مجاناً

انشاء Controller وكتابة الأكواد المطلوبة

لنقم الآن بانشاء Controller جديد لارسال الايميلات, يمكنك ذلك عبر كتابة الأمر التالي في سطر الاوامر:

php artisan make:controller SendController

والان قم بفتح SendController.php واضف الدالتين getSend و postSend اليه:

public function getSend(){
    return view('send');
}
public function postSend(Request $request){
    Mail::to($request->email)->send(New WelcomeNewUser($request->all()));
}

في الكود السابق قمنا بانشاء دالتين , الاولى لعرض صفحة ارسال الايميل التي قمنا بانشائها قبل قليل, و الثانية لارسال الايميل فعلياً , و كما هو واضح في الكود كل ما علينا هو استخدام Mail Facade المقدم من لارافل لارسال الايميل الى المستخدم , وبذلك ستكون العملية تمت بنجاح و يمكنك التأكد من وصول الايميل عبر التوجه الى Mailtrap ان قمت باستخدامه في الاعدادت في الخطوة السابقة, او التوجه الى البريد الوارد في حال قمت باستخدام موفر خدمة SMTP حقيقي.

تأكد أيضاً من تضمين Mail Facade و ال Mailable الذي قمت بانشائه في ال Controller عبر كتابة الكود التالي في بداية ال Controller

use Mail;
use App\Mail\WelcomeNewUser;

أفضل مقدمي خدمة SMTP لاستخدامها في مشروعك

تتنافس الكثير من الشركات في تقديم خدمات SMTP مميزة للمطورين, و تعد شركة MailGun من أشهر الشركات في هذا المجال و تتميز بخدمة جميلة و غير مكلفة مما يجعلها خياراً مناسباً للكثير من المطورين , كما أنها متوافقة مع لارافل و يرحجها فريق تطوير لارافل للاستخدام! 

يوجد شركات أخرى ك SendiBlue, smtp.com, SendGrid, Amazon SES, GSuite, PostMark و غيرهم , كما يمكنك استخدام Gmail SMTP في حال كان مشروعك صغير و لا يرسل عدد كبير من الايميلات.