Hướng dẫn Send EMail trong Laravel 9 với đầy đủ demo
Các bước dưới đây sẽ giúp các bạn tạo 1 app đơn giản để gửi mail từ localhost với laravel 9
- Tạo ứng dụng laravel 9
- Cấu hình file .env smtp google
- Tạo mail class
- Tạo router send Email
- Tạo controller và view blade
- Tạo Job Send Email
- Chạy chương trình
1 Tạo ứng dụng Laravel 9
Tạo ứng dụng laravel 9 với command sau :
composer create-project --prefer-dist laravel/laravel laemail
2 Cấu hình .env smtp google
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=qvnlxhqrcoeybj**
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="[email protected]"
MAIL_FROM_NAME="${APP_NAME}"
3 Tạo mail class
Chúng ta dùng lệnh sau :
php artisan make:mail DemoEmail
Và code như sau ở file app/Mail/DemoEmail.php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class DemoEmail extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
protected $data;
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$data = $this->data;
return $this->view('email.demo',compact('data'));
}
}
Tạo blade mail resources/views/email/demo.blade.php
<h2>{{$data['title']}}</h2>
<div>
<h3>{{$data['content']}}</h3>
</div>
4 Tạo router send Email
Ở router chúng ta thêm 2 router như sau :routes/web.php
Route::get('email',[\App\Http\Controllers\DemoController::class,'index'])->name('email');
Route::post('email',[\App\Http\Controllers\DemoController::class,'sendmail'])->name('sendmail');
5 Tạo controller và view blade
Tại Controller app/Http/Controllers/DemoController.php :
namespace App\Http\Controllers;
use App\Mail\DemoEmail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class DemoController extends Controller
{
public function index()
{
return view('email');
}
public function sendmail(Request $request)
{
$data['title'] ='Demo Email';
$data['content'] = 'Đây là test';
//Mail::to($request->email)->send(new DemoEmail($data));
\App\Jobs\DemoEmail::dispatch($data,$request->email)->delay(now()->addSeconds(5));
return redirect(route('email'))->with(['msg'=>'Đã gửi email thành công']);
}
}
Tạo blade email.blade.php
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<div class="container">
@if(\Illuminate\Support\Facades\Session::has('msg'))
<div class="alert alert-primary" role="alert">
{{ \Illuminate\Support\Facades\Session::get('msg') }}
</div>
@endif
<form method="post" action="{{route('sendmail')}}">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input name="email" type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
</div>
<button type="submit" class="btn btn-primary">Test Send Email</button>
</form>
</div>
6 Tạo Job Send Email
Tạo job với lệnh sau :
php artisan make:job DemoEmail
Ở file app/Jobs/DemoEmail.php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Mail;
class DemoEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
protected $data;
protected $email;
public function __construct($data,$email)
{
$this->data = $data;
$this->email = $email;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Mail::to($this->email)->send(new \App\Mail\DemoEmail($this->data));
}
}
7 Chạy chương trình
Chúng ta chạy lệnh
php artisan serve
Sau đó truy cập link : http://127.0.0.1:8000/email