ارسال ايميل في Laravel

(الشرح التالي يستخدم النسخة 11 من لارافيل)


سيناريو العمل المتبع هو كالتالي:

ارسال ايميل للمستخدم يتضمن اسمه وايميله عند تعبئته form من حقلين هما الاسم والايميل

في البداية ستحتاج إلى إنشاء وتعديل 5 ملفات:

الملف الأول هو api.php ويتم توليده من خلال الأمر التالي:

في النسخ السابقة من لارافيل (V10 وما قبل) هذا الملف موجود بشكل افتراضي.

php artisan install:api

الملفين الثاني والثالث هما MailNotify.php و emailTemplate.blade.php ويتم توليدهما من خلال الأمر المشترك التالي:

php artisan make:mail MailNotify --markdown=emailTemplate

MailNotify (ستجده داخل مجلد app > Mail)
emailTemplate (ستجده داخل مجلد resources > views)

أو يمكنك استخدام ملف HTML عادي بلاحقة blade.php بدل استخدام تنسيق markdown المعقد وذلك بازالة “--markdown=emailTemplate“ من الأمر, لكن ستحتاج الى الى انشاء الملف بنفسك داخل مجلد:
resources > views > emails.


الملف الرابع هو MailNotifyController.php ويتم توليده من خلال الأمر التالي:

php artisan make:controller MailNotifyController

(ستجده داخل مجلد app > Http > Controllers)


الملف الخامس هو env. وهذا الملف موجود بشكل مسبق لكن يحتاج الى بعض التعديلات

وستحتاج أيضا إلى حسابين Gmail للتجربة الأول مرسل والثاني مستقبل.

(في مرحلة الـ production الايميل المرسل سيكون ايميل الاستضافة ببيانات smtp الخاصة به)

البداية من حساب gmail المرسل, ادخل إلى إعدادات حساب جوجل ثم Security ثم 2-Step Verification قم بتفعيلها في حال لم تفعلها من قبل, ثم انزل الى اسفل الصفحة للوصول الى App passwords.

قم بإضافة اسم اختياري لتطبيقك Laravel على سبيل المثال ثم اضغط Create

ستظهر أمامك كلمة مرور قم بنسخها ولصقها في ملف env بين علامتي ' ' بالشكل والبيانات التالية:

(لا تنسى تعديل اسم التطبيق في أعلى ملف env كونه سيظهر في الايميل)

MAIL_MAILER=smtp MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME=Your Email Here MAIL_PASSWORD=Your App Password Here MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}"

الخطوة التالية هي تعديل ملف MailNotify.php:

قم بإنشاء متغيرات ومن ثم مررها كـ بارمترات كما في الصورة, أيضا يمكنك تعديل عنوان الايميل وارفاق ملفات داخله من الملف ذاته واختيار ملف الـ template الذي تريده.

الخطوة التالية هي تعديل ملف الـ MailNotifyController:

ستحتاج إلى استيراد الملف الذي قمنا بإنشائه بالاضافة الى استيراد Mail ومن ثم إنشاء دالة الارسال

الخطوة الأخيرة هي تعديل ملف api.php:

هنا كل ما ستحتاجه هو اضافة route جديد من النوع  post لأننا نرسل اسم المستخدم والايميل من front-end الى back-end, ولا تنسى استيراد الكنترولر:

use App\Http\Controllers\MailNotifyController; . . . Route::post('user/send', [MailNotifyController::class, 'index']);

في حال واجهت مشاكل قم بإعادة إنشاء تطبيق جديد بكلمة مرور جديدة (App password) من حسابك على جوجل

رابط github: هنا