یکی از موارد مهم در طراحی سایت ارسال ایمیل است. معمولا پرکاربرد ترین نوع ایمیل ها، ایمیل های tansactional هستند. به عنوان مثال، تاییدیه ثبت نام، ثبت و ارسال سفارش و ...

تنظیمات ایمیل در لاراول

در پروژه لاراول وارد دایرکتوری Config شوید و فایل Mail.php را باز کنید. این فایل تنظیمات کلی ارسال ایمیل را نمایش می دهد. فایل mail.php یک آرایه برمیگرداند که شامل تنظیمات ایمیل مبدأ، encryption، آدرس ایمیل، رمز عبور و تنظیمات driver می باشد. ایمیل ها می توانند توسط driver های مختلفی ارسال شوند. همانطور که در تصویر زیر هم مشاهده می کنید انواع رایج درایور های ارسال ایمیل، smtp,mailgun,mandrill,ses,sparkpost می باشند.

همچنین در فایل .env که در root پروژه قرار دارد، تمام قسمت های درایور ایمیل، هاست و ... وجود دارند. برای بهبود امنیت بهتر است value ها را داخل فایل .env قرار داده و کلید آنها را در فایل mail.php قرار دهید. 

معرفی وب سایت mailtrap

mailtrap یک وب سایت است که به صورت رایگان و مجازی می توان یک سرویس ایمیل ایجاد کرد. با mailtrap می توانید سرویس ارسال ایمیل خود را تست کنید.

نکته: بیشترین دلایل عدم ارسال ایمیل به تنظیمات شما برمیگردد. برای تست و عیب یابی ارسال ایمیل های خود حتما از سرویس mailtrap  استفاده کنید.

ابتدا بایستی یک حساب کاربری در سایت mailtrap بسازید. سپس سرویس ایمیل شما قابل مشاهده است. گزینه ای به نام demo inbox وجود دارد که پس از انتخاب آن، مشخصات mail برای شما نمایش داده می شود.

در قسمت Credentials اطلاعات ایمیل شما قابل مشاهده است. مهمترین قسمت Integrations می باشد که می توانید فریمورکی که قصد دارید با استفاده از آن ایمیل ارسال کنید را انتخاب کنید. ما از فریمورک لاراول استفاده می کنیم. پس گزینه laravel را انتخاب می کنیم تا اطلاعات مربوطه به ما نمایش داده شود.

اطلاعات driver,host,port  و موارد خواسته شده را در فایل های .env و mail.php قرار دهید. 

تنظیمات ایمیل به اتمام رسید. حال اگر می خواهید به صورت کاملا اصولی کدنویسی کنید به صورتی که کد شما خوانایی بالایی داشته باشد، در ادامه با ما همراه باشید.

نصب پکیج guzzle

تنظیمات انجام شد. حال برای ارسال ایمیل و ارتباط با سرویس های ایمیل نیاز به پکیجی به نام guzzle داریم. برای نصب این پکیج وارد محیط Terminal شوید وکد زیر را تایپ کنید

composer require guzzlehttp/guzzle

ایجاد یک ایمیل با Terminal

حال باید مشخص کنید که ایمیل شما چه زمانی بایستی ارسال شود. طبق آن یک ایمیل در پروژه لاراول خود ایجاد می کنیم. به عنوان مثال ما قصد داریم پس از ارسال درخواست پیشتیبانی توسط کاربر، یک ایمیل برای او ارسال کنیم. از کد زیر استفاده می کنیم.

php artisan make:mail SubmitRequest

با وارد کردن کد فوق در محیط terminal یک دایرکتوری به نام mail در دایرکتوی App ایجاد میشود و فایل SubmitRequest.php داخل آن قرار می گیرد.

اگر با شی گرایی در php آشنایی ندارید، پیشنهاد می کنیم مقاله آموزش شی گرایی در php را مطالعه کنید.

فایل SubmitRequest  دو متد به نام construct و build دارد. فرض کنید مدلی به نام RequestModel داریم که می خواهیم یک رکورد از آن را به ایمیل کاربر ارسال کنیم. 

ابتدا یک property به نام requestObj از نوع public تعریف کردیم که بتوان در تمام متد ها به آن دسترسی داشت. سپس در متد construct یک آبجکت از مدل RequestModel میگیریم. قصد داریم اطلاعاتی از این آبجکت را ایمیل کنیم. پراپرتی requestObj را برابر با آبجکت دریافتی قرار می دهیم. 

ساخت یک view برای ایمیل

متدی به نام build وجود دارد که یک view برمیگرداند. ما می توانیم یک دایرکتوی برای ایمیل های خود ایجاد کرده و در متد build از آن استفاده کنیم. دایرکتوری های ایمیل مانند viewهای لاراول در دایرکتوری resources و views قرار دارد. اطلاعاتی که قصد ارسال آن ها را داریم در view مربوطه می نویسیم. نکته مهم پشتیبانی از فایل های blade است و به راحتی نیز می توانید از کلاس های بوت استرپ در view های خود استفاده کنید.

همانطور که مشاهده می کنید به راحتی می توان در view از آبجکت requestObj استفاده کرد و اطلاعات مربوطه را نمایش داد.

ارسال ایمیل

برای ارسال ایمیل بایستی از طریق کنترلر اقدام کنیم. در فایل web.php یک Route تعریف می کنیم کنیم که پس از وارد کردن آن آدرس که میتواند به صورت post باشد، یک متد از یک کنترلر اجرا شود. به تصویر زیر توجه کنید

ابتدا اطلاعاتی که توسط متد post ارسال شده اند را در مدل RequestModel درج میکنیم. سپس ایمیل مقصد را مشخص می کنیم و با استفاده از تابع Mail ایمیل را همراه با آبجکتی از کلاس RequestModel ارسال می کنیم. حال میتوانیم با استفاده از session یکبار مصرف یک پیغام مبنی بر موفقیت آمیز بودن ارسال ایمیل به کاربر نمایش دهیم