1. Create Authentication In Laravel 5.8
  2. Create Cart Laravel 5.4 +VueJS
  3. Create Multiple Subcategories in Laravel 5.8
  4. Create Template Vuejs and Laravel 5.4
  5. Giới thiệu Laravel 5.4
  6. Hướng dẫn cài đặt laravel 5.4 phần 1
  7. Hướng dẫn cài đặt laravel 5.4 phần 2
  8. Passing data from Laravel to Vue
  9. Multiple Subcategories in Laravel 5.8 + Vue
  10. Login State in Angular 7 + Laravel 5.4
  11. Laravel 5.7 + Vue SPA
  12. Send Mail using Laravel 5.4 + VueJS
  13. SHOW DATA VUEJS IN TEMPLATE BLADE LARAVEL
  14. Xây dụng chức năng Register+ Login bằng Laravel 5.4 + VueJS
  15. Xác thực API bằng OAuth 2 với Laravel 5.4 Passport
  16. Tạo ứng dụng Laravel 5.4 kết hợp với Vuejs
  17. Create Multiple Comment in Laravel 5.8
  18. Filemanager in Laravel 5.8
  19. Connecting Multiple Databases in Laravel 5.8
  20. Laravel Redirect HTTP to HTTPS via .htaccess
  21. User Roles and Permissions in Laravel 5.8
  22. Export Excel using maatwebsite/excel in Laravel 5.8
  23. Show All Image from public folder using Laravel 5.8
  24. Multiple Image Upload using Ajax with Laravel 5.8
  25. Form Request Validation in Laravel 5.8
  26. Send Email using Queue in Laravel 5.8
  27. Ckeditor and Ckfinder in Laravel 5.8 + Vue.js
  28. Add a Marker to Google Map in Laravel 5.8
  29. Pagination for search results laravel 5.8
  30. Using React in Laravel 8
  31. Create Login and Register using Laravel 8 with React

Send Email using Queue in Laravel 5.8

min read

Gửi Email là một trong những yêu câu mà người dùng thường sử dụng trong các website thương mại điện tử. Nay mình dùng một chức năng Send Email Queue trong Laravel 5.8

# Setup Laravel 5.8

composer create-project --prefer-dist laravel/laravel blog "5.8.*"

# Create Email in Laravel 

php artisan make:mail SendEmailDemo

Ta sẽ nhìn thấy một thư mục Mail trong project của ta cùng với file SendEmailDemo.php, ta cần cấu hình file như sau:

namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendEmailDemo extends Mailable
{
    use Queueable, SerializesModels;
    protected $details;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($details)
    {
        $this->details = $details;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('testemail')->with("details",$this->details);
    }
}

Bạn nhìn thấy mình, chổ hàm build() mình return về view('testemail'), bạn tạo cho mình file testemail.blade.php trong thư mục Views

<div style="border:1px solid red;border-radius:5px;padding:10px;box-size:border-box;">
	<h1>{{$details['title']}} - hoanguyenit.com<h1>
	<span style="font-size:13px">{{$details['email']}}</span>
	<p style="font-size:15px;line-height:25px;">
		{{$details['body']}}
	</p>
</div>

# Configuration Queue

Ta mở file .env lên cấu hình như sau:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=email@gmail.com
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
QUEUE_CONNECTION=database

Cấu hình file .env xong, ta chạy câu lệnh bên dưới, sẽ tạo cho ta một table jobs trong database, sẽ chứa các hàng đợi, khi ta gửi một email, nó sẽ lưu vào table này

php artisan queue:table
php artisan migrate

# Create Queue Job

php artisan make:job SendEmailJob

Chạy câu lệnh bên trên sẽ tạo ra một file SendEmailJob.php nằm trong thư mục App\Jobs\SendEmailJob.php
Ta mở file và thêm use App\Mail\SendEmailDemo.php vào file

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use App\Mail\SendEmailDemo;
use Mail;
class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $details;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($details)
    {
        $this->details = $details;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $email = new SendEmailDemo($this->details);
        Mail::to($this->details['email'])->send($email);
    }
}

# Create File Controller

php artisan make:controller EmailController --resource

Ta tạo file EmailController.php trong thư mục App\Http\Controller và thêm use App\Jobs\SendEmailJob vào file, đồng thời ta cấu hình hàm store(Request $request) kiểm tra form nhập gửi mail.
Bạn nhìn thấy dispatch(new SendEmailJob($details)) nó sẽ được gọi và gửi dữ liệu tới SendEmailJob->SendEmailDemo. Tại SendEmailDemo nó sẽ đưa dữ liệu ra template testemail.blade.php để gửi cho người dùng

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Jobs\SendEmailJob;
class EmailController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return View('email');
    }
    public function store(Request $request)
    {
        $validatedData = $request->validate([
            'title' => 'required|max:255',
            'body' => 'required',
        ]);
        if($validatedData){
            $details=[
                "email"=>"thanhhoacth2013@gmail.com",
                "title"=>$request->title,
                "body"=>$request->body
            ];
            dispatch(new SendEmailJob($details));
            return redirect()->route('email.index');
        }
     
    }
}

# Create file View Blade

Vào thư mục View->tạo file email.blade.php, chúng ta thiết kế giao diện nhập thông tin gửi email 

//email.blade.php 
@extends('layouts.app')
@section('content')

<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-4">
        <h2>Send Email using Laravel 5.8</h2>
        @if ($errors->any())
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
            <form action="{{route('email.store')}}" method="post">
            @csrf
                <div class="form-group">
                    <label for="title">Title</label>
                    <input type="text" name="title" placeholder="Title" class="form-control"/>
                </div>
                <div class="form-group">
                    <label for="body">Body</label>
                    <input type="text" name="body" placeholder="Body" class="form-control"/>
                </div>
                <div class="form-group">
                    <input type="submit" name="submit" value="Send Email" class="btn btn-success"/>
                </div>
            </form>
        </div>
        <div class="cold-md-8">
            <div id="calendar"></div>
        </div>
    </div>
</div>
@endsection

# Configuration Route

Vào thư mục Routes/web.php và chỉnh sửa routes như code bên dưới 

Route::prefix('email')->group(function () {
    Route::get('/','EmailController@index')->name('email.index');
    Route::post('/email','EmailController@store')->name('email.store');
});

# Test Send Email using Queue

Bạn mở 2 cửa sổ command và chạy câu lệnh bên dưới xong, gõ trên trình duyệt http://localhost:8000/email để test , bạn có thể nhìn các tiến trình chạy trong command 1

command 1: php artisan queue:listen
command 2: php artisan serve

send email using queue in laravel 5.8send email using queue in laravel 5.8send email using queue in laravel 5.8

x

Ủng hộ tôi bằng cách click vào quảng cáo. Để tôi có kinh phí tiếp tục phát triển Website!(Support me by clicking on the ad. Let me have the money to continue developing the Website!)