How to Send Mail using Queue in Laravel?
In this tutorial, I would like to share with you how to create queue job for email send in laravel 5, laravel 6, laravel 7, laravel 8, laravel 9, laravel 10 and laravel 11. We can use database, redis, amazon sqs and beanstalkd for queue driver. I create simple example of queue job for mail send that will help more for less load time.
Laravel Queue will help to save time of loading. If you are work on your big application like CRM, E-Commerce etc website then you require to make job for each task. It would be great if you use queue, because it's very fast and visitor will happy to see loading time.
Here, i am going to share very simple example to create query with database driver for test email sending. You can definitely understand how to work queue and how it's easy. If you haven't used before then don't worry, here if from starch and very simple. This is for startup developer on queue task.
So, let's follow bellow few step and get full example of how to create queue in Laravel.
Preview:
Step 1 : Create Mail
We are going from scratch and in first step, we will create email for testing using Laravel Mail facade. So let's simple run bellow command.
php artisan make:mail SendEmailTest
Now you will have new folder "Mail" in app directory with SendEmailTest.php file. So let's simply copy bellow code and past on that file.
app/Mail/SendEmailTest.php
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class SendEmailTest 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->view('emails.test');
}
}
Ok, now we require to create email view using blade file. So we will create simple view file and copy bellow code om following path.
resources/views/emails/test.blade.php
<center>
<h2 style="padding: 23px;background: #b3deb8a1;border-bottom: 6px green solid;">
<a href="https://itsolutionstuff.com">Visit Our Website : ItSolutionStuff.com</a>
</h2>
</center>
<p>Hi, Sir</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<strong>Thank you Sir. :)
after configuration of view file, we have to setup for email send, So let' set configuration in .env file:
.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xyz@gmail.com
MAIL_PASSWORD=123456
MAIL_ENCRYPTION=tls
Step 2 : Configuration of Queue
Now in next step, we will make configuration on queue driver so first of all, we will set queue driver "database". You can set as you want also we will define driver as redis too. So here define database driver on ".env" file:
.env
QUEUE_DRIVER=database
After that we need to generate migration and create tables for queue. So let's run bellow command for queue database tables:
Generate Migration:
php artisan queue:table
Run Migration:
php artisan migrate
Step 3 : Create Queue Job
now we will create queue job bey following command, this command will create queue job file with Queueable. So let's run bellow command:
php artisan make:job SendEmailTest
now you have SendEmailTest.php file in "Jobs" directory. So let's see that file and put bellow code on that file.
app/Jobs/SendEmailTest.php
<?php
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\SendEmailTest as SendEmailTestMail;
use Mail;
class SendEmailTest 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 SendEmailTestMail();
Mail::to($this->details['email'])->send($email);
}
}
Step 4 : Use Queue Job
Now time is use and test created queue job, so let's simple create route with following code for testing created queue.
routes/web.php
Route::get('email-test', function(){
$details['email'] = 'add_your_email@gmail.com';
dispatch(new App\Jobs\SendEmailTest($details));
dd('done');
});
Ok route is defined, you can watch your queue process using laravel queue command, so let's run bellow command:
php artisan queue:listen
Now run your project and bellow link:
http://localhost:8000/email-test
I hope it can help you....
Hardik Savani
I'm a full-stack developer, entrepreneur and owner of ItSolutionstuff.com. I live in India and I love to write tutorials and tips that can help to other artisan. I am a big fan of PHP, Laravel, Angular, Vue, Node, Javascript, JQuery, Codeigniter and Bootstrap from the early stage. I believe in Hardworking and Consistency.
We are Recommending you
- Laravel 10 Markdown | Laravel 10 Send Email using Markdown Mailables
- Laravel 10 Mail | Laravel 10 Send Mail Tutorial
- Laravel Change Mail Driver Dynamically Example
- Laravel Mail Send with PDF Attachment Example
- How to set CC And BCC Email Address In Laravel Mail?
- Laravel - How to Set Subject in Mail?
- How to Send Mail using Sendinblue in Laravel?
- Laravel Send Mail using Mailtrap Example
- How to Generate PDF with Graph in Laravel?
- How to Create Captcha Code in Laravel?
- Laravel Mailchimp API Integration Example
- How to Send Mail using Sendgrid in Laravel?
- How to Send Mail in PHP Laravel?