In this tutorial, I will show you how to send e-mail using queue in laravel 7/8, many time we can see some processes take more time to load like payment gateway, email send, etc. Whenever you are sending email for verification then it load time to send mail because it is services. If you don't want to wait for the user to send an email or other processes on loading server side process then you can use queue.
In laravel 7/8 send mail using queue example we will set up mailtrap for sending an email. Laravel queues provide a unified queueing API across a variety of different queue backends, such as Amazon SQS, Redis, or even a relational database.
So, let's see send mail using queue in laravel 7/8 and laravel 7/8 mail queue example.
Step 1 : Install Laravel
Step 2 : Create Mail Setup
Step 3 : Configuration of Queue
Step 4 : Create Queue Job
Step 5 : Test Queue Job
Install Laravel application using composer command.
composer create-project --prefer-dist laravel/laravel blog
Run the below command in your terminal
php artisan make:mail SendEmailDemo
Now you will find the new Mail folder in the app directory with the SendEmailDemo.php file. So, copy the below code on this file.
app/Mail/SendEmailTest.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SendEmailDemo extends Mailable
{
use Queueable, SerializesModels;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->subject('How to send e-mail using queue in laravel 7-8')
->view('email.demo');
}
}
After that, we need to create an email view using a blade file. So, we will create demo.blade.php following the path.
resources/views/email/demo.blade.php
<!DOCTYPE html>
<html>
<head>
<title>How to send e-mail using queue in laravel 7/8 - Techsolutionstuff</title>
</head>
<body>
<center>
<h2>
<a href="https://techsolutionstuff.com">Visit Our Website : Techsolutionstuff</a>
</h2>
</center>
<p>Hi,</p>
<p>This is test mail. This mail send using queue listen in laravel 7/8.</p>
<strong>Thanks & Regards.</strong>
</body>
</html>
Now, we will configuration of view file, we have to set up for email send, So let' set configuration in the .env file.
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
Now, we are set up configuration on queue driver so first of all, we will set queue driver "database". You can set it as you want. also, we will define the driver as redis too. so, here define the database driver on the .env file.
QUEUE_CONNECTION=database
After that, we need to generate migration and create tables for queues. So, let's run the below command for queue database tables.
php artisan queue:table
Now, run the migration in your terminal.
php artisan migrate
In this step, we will create a new queue job So, copy the below command in your terminal.
php artisan make:job SendEmailJob
As of now, you will find the SendEmailJob.php file in this path app/Jobs/SendEmailJob.php. So, copy the below code to that location.
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use App\Mail\SendEmailDemo;
use Mail;
class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $send_mail;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($send_mail)
{
$this->send_mail = $send_mail;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$email = new SendEmailDemo();
Mail::to($this->send_mail)->send($email);
}
}
Now, we will test our queue job. add below code in your web.php file
Route::get('test/email', function(){
$send_mail = 'test@gmail.com';
dispatch(new App\Jobs\SendEmailJob($send_mail));
dd('send mail successfully !!');
});
Now, clear config cache using the below command for sending mail with queue laravel 7/8.
php artisan config:clear
Now, run this laravel 7/8 queue example with artisan command.
php artisan serve
You might also like :