ارسال ایمیل در لاراول (Laravel) – راهنمای کاربردی


فریمورک وب لاراول از مزیت کتابخانه محبوب SwiftMailer برخوردار است که استفاده از آن آسان است و طیف متنوعی از درایورهای ایمیل ارائه کرده است. در همین راستا، در این مقاله قصد داریم به بررسی API ارسال ایمیل در لاراول بپردازیم.
راهاندازی پیشنیازها
لاراول یک کتابخانه پوششی بر روی کتابخانه SwiftMailer بنا میکند که مدیریت ایمیل را همزمان به کاری بسیار آسان و قابل پیکربندی تبدیل میکند.
تنظیمات پیشفرض ایمیل را میتوانید در فایل config/mail.php مشاهده کنید:
هنگامی که از ارسال ایمیل صحبت میکنیم، لاراول از درایورهای مختلفی پشتیبانی میکند. چنان که میبینید MAIL_DRIVER پیشفرض به صورت stmp تنظیم شده است. اگر قصد دارید از درایور stmp برای ارسال ایمیل استفاده کنید، در این صورت به مجموع تنظیمات دیگری مانند MAIL_HOST ،MAIL_PORT ،MAIL_ENCRYPTION ،MAIL_USERNAME و MAIL_PASSWORD هم نیاز خواهید داشت.
از سوی دیگر اگر قصد دارید از درایور sendmail استفاده کنید، در این صورت باید مطمئن شوید که مسیر سیستم sendmail در فایل config/mail.php به مقدار صحیحی تنظیم شده است.
همچنین میتوانید آدرس from را که در زمان ارسال ایمیلها با کلید from استفاده میشوند، تنظیم کنید. در نهایت اگر میخواهید از رندرینگ ایمیل مبتنی بر Markdown استفاده کنید، میتوانید این تنظیمات را زیر کلید markdown تنظیم کنید.
نکته جالب دیگر این است که میتوانید از ارائهدهندگان سرویسهای ایمیل شخص ثالث مانند Mailgun ،Mandrill ،SES و SparkPost نیز استفاده کنید. اگر از یکی از این سرویسها استفاده میکنید، باید اطمینان حاصل کنید که تنظیمات مربوطه را در فایل config/services.php تعیین کردهاید.
بدین ترتیب یک مقدمه کوتاه در مورد تنظیمات مرتبط با API ایمیل در لاراول داشتیم. از این بخش به بعد قصد داریم یک مثال سفارشی را بررسی کنیم که روش ارسال ایمیلها را نمایش میدهد.
ایجاد کلاس Mailable
در این بخش، کلاس Mailable را میسازیم که برای ارسال ایمیل استفاده میشوند.
کلاس Mailable مسئول ارسال ایمیلها با استفاده از mailer است که آن نیز در فایل config/mail.php پیکربندی شده است. در واقع لاراول از قبل یک دستور آرتیزان به صورت زیر دارد که امکان ایجاد یک قالب پایه را به ما میدهد:
این دستور یک قالب ایمیل خالی در آدرس app/Mail/DemoEmail.php ایجاد میکند که در قطعه کد زیر میتوانید آن را ببینید:
محتوای این فایل را با کدهای زیر جایگزین کنید:
دو متد مهم در کلاس mailable به نامهای construct__ و build وجود دارند که به صورت سراسری پیادهسازی میشوند. متد construct__ برای مقداردهی اشیایی استفاده میشود که در قالب ایمیل قرار است استفاده شوند. از سوی دیگر متد build برای مقداردهی مقادیر خاص ایمیل مانند from، قالب view، پیوست ایمیل و نظایر آن استفاده میشود.
در این مورد، شیء demo$ را به صورت یک آرگومان سازنده ارسال میکنیم و آن را به مشخصه عمومی demo انتساب میدهیم. در متد build یک پیکربندی بندی خاص ایمیل را مقداردهی میکنیم.
From برای تعیین آدرس ایمیلی استفاده میشود که در آدرس فرستنده ایمیل درج خواهد شد.
با استفاده از متد view میتوان قالب ایمیلی را تعیین کرد که در زمان ارسال کردن ایمیل با استفاده از کلاس mailable استفاده خواهد شد. در این مورد ما از mails.demo استفاده میکنیم و معنی آن این است که باید یک فایل قالب view در مسیر resources/views/mails/demo.blade.php بسازید.
سپس متد text برای راهاندازی نسخه متنی سادهای از یک قالب ایمیل استفاده خواهد شد.
چنان که قبلاً اشاره کردیم متد construct__ برای راهاندازی شیءهایی استفاده میشود که در قالب ایمیل استفاده میشوند. میتوان از متد with نیز استفاده کرد که امکان تنظیم دادههای view یک پیام را فراهم میسازند. سپس از متد attach برای الصاق یک تصویر به پیام استفاده میکنیم.
البته ما باید یک قالب ایمیل ایجاد کنیم که در زمان ارسال ایمیلها مورد استفاده قرار خواهد گرفت. در ادامه فایل resources/views/mails/demo.blade.php را با محتوای زیر ایجاد میکنیم:
همچنین یک نسخه متنی ساده از این فایل را در مسیر resources/views/mails/demo_plain.blade.php میسازیم:
بدین ترتیب کلاس mailable بنا به دلخواه ما تنظیم شده است، اما هنوز کار ما تمام نشده است، چون باید از یک facade به نام Mail برای ارسال عملی ایمیلها استفاده کنیم. در بخش بعدی در مورد شیوه استفاده از facade به نام Mail برای ارسال ایمیل با استفاده از DemoEmail در کلاس mailable که هم اینک ایجاد کردیم توضیح خواهیم داد.
جمعبندی
در این بخش یک نمونه میسازیم که نشان میدهد چگونه میتوان از کلاس mailable ایجاد شده در مرحله قبلی استفاده کرد.
یک فایل کنترلر در مسیر app/Http/Controllers/MailController.php با محتوای زیر میسازیم:
لازم به اشاره است که ما Facede موجود در مسیر Illuminate\Support\Facades\Mail که برای ارسال ایمیل استفاده میشود را نیز در این فایل include کردهایم. در متد send گزاره زیر مسئول ارسال یک ایمیل با مقداردهی App\Mail\DemoEmail در کلاس Mailable است:
متد to در Facade به نام Illuminate\Support\Facades\Mail یک وهله از کلاس \Illuminate\Mail\PendingMail بازگشت میدهد که از قبل شامل یک mailer مناسب پیکربندی شده در فایل config/mail.php است.
در نهایت از متد send در کلاس Illuminate\Mail\PendingMail\ استفاده میکنیم که عملاً یک ایمیل را ارسال میکند.
برای تست کردن این پروژه نمونه، یک مسیر مرتبط را در فایل اضافه میکنیم:
در این مرحله میتوانید URL زیر را اجرا کنید تا ببینید که مطابق انتظار کار میکند:
از سوی دیگر اگر میخواهید قالبهای ایمیل خود را به سرعت و بدون ارسال واقعی ایمیل تست کنید، شرایطی در لاراول تدارک دیده شده است که امکان لاگ کردن همه ایمیلهای خروجی را میدهد.
برای استفاده از این امکان باید مقدار MAIL_DRIVER را در فایل config/mail.php به log تنظیم کنید. سپس میتوانید URL فوقالذکر را اجرا کرده و فایل لاگ را بررسی کنید و ببینید که آیا قالب ایمیل در آنجا لاگ شده است یا نه.
اگر همه چیز به درستی پیش برود، باید ببینید که یک ایمیل در فایل storage/logs/laravel.log لاگ شده است. این همه آن چیزی است که در مورد قابلیت ایمیل در لاراول میتوان گفت و بدین ترتیب به انتهای این مقاله میرسیم.
سخن پایانی
در این مطلب به معرفی API ایمیل پرداختیم که از قابلیتهای داخلی لاراول است و از گستره متنوعی از درایورهای ارسال ایمیل نیز پشتیبانی میکند. ما کار خود را با توضیح مفاهیم مقدماتی آغاز کردیم و کلاس mailable را پیادهسازی کردیم که یک جزء ضروری در API ایمیل در لاراول است. در انتها کلاس mailable را نیز با ایجاد یک کنترلر سفارشی تست کردیم تا طرز کار عملی آن را مشاهده کنیم.
اگر این مطلب برای شما مفید بوده است، آموزشهای زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامهنویسی PHP
- آموزش REST API در Laravel (لاراول) با بسته Passport
- مجموعه آموزشهای برنامهنویسی
- انتشار لاراول (Laravel Broadcasting) چگونه کار می کند؟ — راهنمای کاربردی
- زمانبندی وظایف در لاراول (Laravel) — راهنمای مقدماتی
==