How to send email to multiple recipients in laravel?

How to send email to multiple recipients in laravel?

Hello Artisans.

In this article, I will show you a complete guide on how to send emails to multiple recipients. This post goes into details on how to email send to multiple recipients in laravel. This article will be a game changer for the Laravel beginners. We will use laravel 8 to send bulk email Laravel. You can use this example for laravel 6, laravel 7, laravel 8 and laravel 9 as well.

So, let's get started.

Step 1: Install Laravel

If you have already a Laravel setup then this is not required just skip this step.

composer create-project --prefer-dist laravel/laravel blog

Step 2: Mail Configuration

You must have to configure a sender mail configuration to send emails from your Larave application. In this example, I'm using Sendinblue email service. So, let's add send in blue mail configuration in laravel .env file. You can check here complete guide on how to setup SendInBlue account and send single email.

 

...
MAIL_MAILER=smtp
MAIL_HOST=smtp-relay.sendinblue.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=your-password
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"
...

Read also: How to send email with Gmail SMTP in Laravel?

Step 3: Create Mail Class

Create a mail class WelcomeMail to send email to all users. Just run the below command to create mail class in Laravel. 

php artisan make:mail WelcomeMail

It will create a file WelcomeMail.php in app/Mail directory.

 

app/Mail/WelcomeMail.php

<?php

namespace App\Mail;

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

class WelcomeMail extends Mailable
{
    use Queueable, SerializesModels;

    public $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->subject('Welcome to Coders Vibe')
        ->view('mails.welcome_mail');
    }
}

Step 4: Create WelcomeMail view file

Now, Let's create a welcome email blade file to create email template. I have created a file welcome_mail.blade.php in /resources/views/mails/ directory.

resources/views/mails/welcome_mail.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Codersvibe.com</title>
</head>
<body>

	<h1>Hi, {{ $user->name }}</h1>
    <h4>Welcome to the Coders Vibe</h4>
</body>
</html>

Step 5: Create route in route/web.php file

Now we need to create a route to trigger our mailable class to send the email to multiple users at the same time. 

route/web.php

 

...
Route::get('send-mail-to-users', [UserController::class,'sendmails']);

Step 6: Create controller

We have to create a new UserController. In this file, we will handle the mail requests to send emails to multiple recipients. So, let's add code to send emails in this controller. 

We have different methods to send same email to multiple recipients in laravel.

Using foreach loop

We can utilize a foreach loop to send multiple emails. We'll iterate through each user to send emails within the loop, ensuring emails are sent to all users or only active users, based on the specified criteria.

app/Http/Controllers/UserController.php

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Models\User;
use App\Mail\UserEmail;
use Mail;
  
class UserController extends Controller
{
    /**
     * Send the email to multiple recipients with foreach loop
     *
     * @return response()
     */
    public function sendEmail(Request $request)
    {
        $users = User::all();
        
        // Alternatively, if you wish to send emails to only active users, uncomment the following line.
  		// $users = User::whereIs_active(true)->get();
  
        foreach ($users as $key => $user) {
            Mail::to($user->email)->send(new UserEmail($user));
        }
  
        return response()->json(['success'=>'Send email successfully.']);
    }
}

Without foreach loop

We can add an array to send multiple emails to different recipients. It's a good way to send emails to multiple recipients without foreach loop in laravel. 

app/Http/Controllers/UserController.php

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Models\User;
use App\Mail\UserEmail;
use Mail;
  
class UserController extends Controller
{
    /**
     * Send the email to multiple recipients with BCC method
     *
     * @return response()
     */
    public function sendEmail(Request $request)
    {
    	$users = User::all();
            
        Mail::to($users)->send(new UserEmail($user));
  
        return response()->json(['success'=>'Send email successfully.']);
    }
}

Step 7: Sending Mail

Now you can send multiple emails by calling your route. 

 

https://127.0.0.1:8000/send-mail-to-users

I hope, it will help you. 

Happy Coding. 

Leave a Comment

Your email address will not be published. Required fields are marked *

Go To Top
×