جهت ارسال ایمیل در لاراول باید موارد زیر را در نظر داشته باشید.
- تنظیمات ایمیل
- ساخت کلاس Mailable
- ارسال ایمیل
تنظیمات سرور ایمیل
تنظیمات مربوط به ایمیل در مسیر config/mail.php
موجود می باشد. رول کار به این صورت است که به ازای هر option یا مقدار موجود در فایل .env
را می خواند و در صورت خالی بودن این مقدار در فایل .env
مقداری پیش فرض به آن اختصاص می دهد.
تنظیمات مربوط به ارسال ایمیل در فایل mail.php به شرح زیر است :
- Mail Driver
- SMTP Host Address
- SMTP Host Port
- Global “From” Address
- E-Mail Encryption Protocol
- SMTP Server Username
- Sendmail System Path
- Markdown Mail Settings
تنظیمات ایمیل در لاراول موجود در فایل .env
به شکل زیر می باشد:
MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=nul MAIL_ENCRYPTION=null
به طور معمول ایمیل ها در نرم افزار طی یک روال سیستماتیک ارسال می شوند. از این رو ایمیل ها دارای قالب های یکسان و پارامتر های متفاوت به ازای هر عملگر می باشند.
به همین منظور به ازای هر قالب ایمیل باید یک کلاس بسازید. مثلا ایمیل که پس از ساخت محصول باید فرستاده شود.
برای این کار باید دستور زیر را اجرا کنید :
php artisan make:mail ProductCreated
پس از اجرای دستور بالا کلاس زیر در مسیر app/Mail/ProductCreated.php
ساخته می شود :
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class ProductCreated extends Mailable { use Queueable, SerializesModels; public function __construct(){} public function build() { return $this->view('view.name'); } }
کلاس بالا همان قالب ایمیلی است که هر زمان نیاز بود از آن استفاده می کنیم (instanse می گیریم). این کلاس هم نیاز به پارامتر دارد و هم نیاز به view . پارامتر ها از طریق متد سازنده به آن فرستاده می شود و در متد build قالب view را در آن return می کنیم.
در مثال زیر می خواهیم زمانی که محصول ساخته شد ایمیلی برای کاربر سازنده بفرستیم. در ابتدا باید شئ $product
را برای ایمیل بسازیم (مثلا در کنترلر ساخته می شود) و در خروجی آن بفرستیم. برای این کار یک متغیر داخلی برای کلاس تعریف می کنیم که در متد سازنده مقدار دهی می شود. این متغیر در زمان ساخت شئ از روی کلاس یعنی جایی که ما از کلاس ProductCreated نمونه گیری (instanse) می گیریم باید مقدار دهی کنیم (مرحله ارسال ایمیل). این متغیر در طول view که در متد build داریم قابل دسترس است.
<?php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Queue\ShouldQueue; class ProductCreated extends Mailable { use Queueable, SerializesModels; public $product; public function __construct($product) { $this->product = $product; } public function build() { return $this->view('emails.product-created'); } }
مثلا در view در مسیر resourses/views/emails/product-created.blade.php
ما کد های زیر را داریم.
<!DOCTYPE html> <html> <head> <title>product created</title> </head> <body> <h1>product created with name {{$product->name}} </h1> </body> </html>
در مرحله ای که ایمیل را ارسال می کنیم قالب بالا به کاربر ارسال می شود.
ارسال ایمیل با Mail
برای ارسال ایمیل باید از Fecad با نام Mail استفاده کنیم. Mail پارامتر های زیادی می گیرد که شامل attach
(الصاق فایل به ایمیل) و cc
(Carbon Copy) و … می باشد . ما از to
برای آدرس گیرنده و از send
برای ارسال ایمیل استفاده می کنیم.
<?php namespace App\Http\Controllers; use App\Product; use App\Mail\ProductCreated; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; use App\Http\Controllers\Controller; class ProductController extends Controller { public function create(Request $request) { $product = App\Product::create($request->get('name')); // product created successfully ... Mail::to($request->user())->send(new ProductCreated($product)); } }
- متد to به عنوان ورودی یک شئ از مدل User می گیرد.
- متد send به عنوان ورودی یک شئ از مدل ProductCreated که از جنس Mailable و در مسیر App\Mail\ProductCreated می باشد می گیرد.
- Mail در مسیر
Illuminate\Support\Facades\Mail
باید import شود.(زمانی که در controller استفاده می شود)
دیدگاهتان را بنویسید