Laravel Send Bulk Mail Using Queue
Step 1: install laravel
Step 2:Change In .env File
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username
MAIL_PASSWORD=your_passowrd
MAIL_ENCRYPTION=TLS
QUEUE_DRIVER=database
Step 3: Create Route
use App\Http\Controllers\SendMailController;
Route::get('send/mail', [SendMailController::class, 'send_mail'])->name('send_mail');
Step 4: Create Queue Table
php artisan queue:table
php artisan migrate
Step 5:Create Controller and code
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class SendMailController extends Controller
{
public function send_mail(Request $request)
{
$details = [
'subject' => 'Test Notification'
];
$job = (new \App\Jobs\SendQueueEmail($details))
->delay(now()->addSeconds(2));
dispatch($job);
echo "Mail send successfully !!";
}
}
Step 6: Create Job
php artisan make:job SendQueueEmail
<?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\User;
use Mail;
class SendQueueEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $details;
public $timeout = 7200; // 2 hours
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($details)
{
$this->details = $details;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$data = User::all();
$input['subject'] = $this->details['subject'];
foreach ($data as $key => $value) {
$input['email'] = $value->email;
$input['name'] = $value->name;
\Mail::send('mail.Test_mail', [], function($message) use($input){
$message->to($input['email'], $input['name'])
->subject($input['subject']);
});
}
}
}
Step 7: Create Mail Blade
resources/views/mail/Test_mail.blade.php
Hi <br/>
This is Test Mail.<br />
Thank you !!
Step 8: php artisan queue:listen
========End==================================
No comments