Comment envoyer un e-mail à plusieurs utilisateurs dans Laravel ?

Publié par administrateur vue 523

Dans ce  tutoriel je vous montre comment mettre en place une fonctionnalité d'envoi d'email à de multiples utilisateurs avec le framework laravel 

 simplement la classe de courrier UserEmail en utilisant la commande laravel artisan, puis nous définirons la vue et le sujet. créons donc du courrier par la commande ci-dessous et mettons le code sur le fichier UserEmail.php.

Toutes les étapes requises ont été effectuées, vous devez maintenant taper la commande ci-dessous et appuyer sur Entrée pour exécuter l'application Laravel :

php artisan make:mail UserEmail

<?php

  

namespace App\Mail;

  

use Illuminate\Bus\Queueable;

use Illuminate\Contracts\Queue\ShouldQueue;

use Illuminate\Mail\Mailable;

use Illuminate\Queue\SerializesModels;

  

class UserEmail extends Mailable

{

    use Queueable, SerializesModels;

  

    public $user;

  

    /**

     * Create a new message instance.

     *

     * @return void

     */

    public function __construct($user)

    {

        $this->user = $user;

    }

  

    /**

     * Build the message.

     *

     * @return $this

     */

    public function build()

    {

        return $this->subject('Mail envoyé depuis kgsinformatique.tech')

                    ->view('emails.userEmail');

    }

}

Ensuite, nous allons créer un fichier de lame de courrier électronique appelé userEmail dans le dossier de courrier électronique avec le code ci-dessous. je viens donc de mettre à jour le fichier userEmail.blade.php.

<!DOCTYPE html>

<html>

<head>

    <title>kgsinformatique.tech</title>

</head>

<body>

  

    <h1>Hi, {{ $user->name }}</h1>

    <p>{{ $user->email }}</p>

     

    <p>Merci</p>

</body>

</html>

Étape 4 : Ajouter des itinéraires

De plus, ouvrez le fichier routes/web.php et ajoutez les routes pour gérer les requêtes GET et POST pour la liste des utilisateurs et la méthode d'envoi de courrier électronique.

<?php

  

use Illuminate\Support\Facades\Route;

  

use App\Http\Controllers\UserController;

  

/*

|--------------------------------------------------------------------------

| Web Routes

|--------------------------------------------------------------------------

|

| Here is where you can register web routes for your application. These

| routes are loaded by the RouteServiceProvider within a group which

| contains the "web" middleware group. Now create something great!

|

*/

  

Route::get('users', [UserController::class, 'index'])->name('users.index');

Route::post('users-send-email', [UserController::class, 'sendEmail'])->name('ajax.send.email');


Étape 5 : Créer un contrôleur

Dans cette étape, nous allons créer un nouveau UserController ; dans ce fichier, nous ajouterons la logique pour récupérer les enregistrements de la base de données, les transmettre au fichier de vue et envoyer un e-mail.

Alors, mettons à jour le code suivant vers Controller File.

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

{

    /**

     * Display a listing of the resource.

     *

     * @return \Illuminate\Http\Response

     */

    public function index(Request $request)

    {

        $users = User::select("*")

                        ->paginate(10);

          

        return view('users', compact('users'));

    }

  

    /**

     * Write code on Method

     *

     * @return response()

     */

    public function sendEmail(Request $request)

    {

        $users = User::whereIn("id", $request->ids)->get();

  

        foreach ($users as $key => $user) {

            Mail::to($user->email)->send(new UserEmail($user));

        }

  

        return response()->json(['success'=>'Mail envoyé avec success.']);

    }

}

Étape 6 : Créer une vue lame

Dans cette étape, nous allons simplement créer le fichier users.blade et mettre à jour le code ci-dessous :

ressources/views/users.blade.php


<!DOCTYPE html>

<html>

<head>

    <meta charset="utf-8">

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Envoi de mail groupés par checkbock - kgsinformatique.tech</title>

    <link href="bootstrap@5.0.2/dist/css/bootstrap.min.css">https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

    <meta name="csrf-token" content="{{ csrf_token() }}" />

</head>

<body>

  

<div class="container">

    <h1>Envoi de mail mutliple avec laravel  - kgsinformatique.tech</h1>

  

    <button class="btn btn-success send-email">Send Email</button>

  

    <table class="table table-bordered data-table">

        <thead>

            <tr>

                <th>#</th>

                <th>No</th>

                <th>Name</th>

                <th>Email</th>

            </tr>

        </thead>

        <tbody>

            @foreach($users as $user)

                <tr>

                    <td><input type="checkbox" class="user-checkbox" name="users[]" value="{{ $user->id }}"></td>

                    <td>{{ $user->id }}</td>

                    <td>{{ $user->name }}</td>

                    <td>{{ $user->email }}</td>

                </tr>

            @endforeach

        </tbody>

    </table>

  

    {{ $users->links() }}

</div>

  

<script type="text/javascript">

  

    $.ajaxSetup({

        headers: {

            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')

        }

    });

      

    $(".send-email").click(function(){

        var selectRowsCount = $("input[class='user-checkbox']:checked").length;

  

        if (selectRowsCount > 0) {

  

            var ids = $.map($("input[class='user-checkbox']:checked"), function(c){return c.value; });

  

            $.ajax({

               type:'POST',

               url:"{{ route('ajax.send.email') }}",

               data:{ids:ids},

               success:function(data){

                  alert(data.success);

               }

            });

  

        }else{

            alert("Selectionner au moins un utilisateur dans la liste.");

        }

        console.log(selectRowsCount);

    });

  

</script>

  

</body>

</html>

Toutes les étapes requises ont été effectuées, vous devez maintenant taper la commande ci-dessous et appuyer sur Entrée pour exécuter l'application Laravel :

php artisan serve

Conclusion

Voila un peu le process pour mettre en place une fonctionnalité d'envoi de mail à de multiples utilisateurs avec laravel