Un tutoriel pour envoyer un courrier électronique ou e-mail dans un projet Laravel en utilisant un compte Gmail et le serveur SMTP Google.
Le framework PHP Laravel fournit une API d’envoi de courrier électronique (courriel, mail ou e-mail) qui permet d’utiliser les services locaux ou cloud à travers des drivers (pilotes) pour :
Le SMTP, « Simple Mail Transfer Protocol », est un protocole de communication utilisé pour transférer un courriel vers les serveurs de messagerie électronique.
Nous voulons voir dans ce guide comment utiliser le serveur SMTP de Google pour envoyer un e-mail depuis une application Laravel en utilisant un compte Gmail (@gmail.com). Mais avant, commençons par voir comment créer le mot de passe d’application Google que nous allons utiliser pour le compte @gmail.
Un mot de passe d'application Google est un code secret à 16 chiffres qu’un appareil ou une application n'appartenant pas à Google, tels que notre application Laravel, peut utiliser pour accéder aux informations et services d’un compte Google.
Nous allons utiliser ce mot de passe d'application pour la configuration du driver SMTP dans le projet Laravel.
Voici la procédure pour obtenir un mot de passe d’application Google :
La capture ci-dessous illustre la procédure :
Nous vous recommandons de consulter l’aide compte Google si vous rencontrez des problèmes.
Nous allons décortiquer en trois étapes la procédure d’envoi d’un mail dans un projet Laravel en utilisant le serveur SMTP de Google :
Editons les informations MAIL_*
au fichier .env à la racine du projet en renseignant les informations SMTP Google de la manière suivante :
…
MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=votre_adresse@gmail.com
MAIL_PASSWORD=votre_mot_de_passe_d_application
MAIL_ENCRYPTION=ssl
…
Nous avons :
MAIL_DRIVER
: le canal de transfert du mail (MAIL_MAILER
pour les versions >= 7 de Laravel)MAIL_HOST
: l’adresse du serveur SMTPMAIL_PORT
: Le port utilisé par le serveur SMTP GoogleMAIL_USERNAME
: votre adresse email GMAILMAIL_PASSWORD
: le mot de passe d’application à 16 chiffres que nous avons généréMAIL_ENCRYPTION
: Le cryptageChaque mail dans un projet Laravel est représenté par une classe Mailable. Celle-ci fournit des méthodes pour configurer la présentation et l’envoie du mail.
Pour générer la classe Mailable pour notre message, appelons-la « MessageGoogle », la commande artisan à exécuter dans la console (invite des commandes) est la suivante :
php artisan make:mail MessageGoogle
Cette commande crée le fichier app/Mail/MessageGoogle.php. Nous allons l'éditer en ajoutant les informations suivantes :
$data
pour passer les données à la vue (présentation de l’e-mail)from(…)
, le sujet du message subject(…)
, la vue à présenter view(…)
dans la méthode build()
Le code de la classe Mailable app/Mail/MessageGoogle.php :
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class MessageGoogle extends Mailable
{
use Queueable, SerializesModels;
public $data; // Données pour la vue
public function __construct($data)
{
$this->data = $data;
}
public function build()
{
return $this->from("wilo.ahadi@gmail.com") // L'expéditeur
->subject("Message via le SMTP Google") // Le sujet
->view('emails.message-google'); // La vue
}
}
La vue resources/views/emails/message-google.blade.php peut se présenter de la manière suivante :
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body style="background: #e5e5e5; padding: 30px;" >
<div style="max-width: 320px; margin: 0 auto; padding: 20px; background: #fff;">
<h3>Message via le SMTP Google :</h3>
<div>{{ $data['message'] }}</div>
</div>
</body>
</html>
Pour envoyer le courriel, nous allons définir deux routes « message » et un contrôleur « MessageController » :
Pour générer le contrôleur, exécutons la commande artisan suivante :
php artisan make:controller MessageController
Cette commande crée le fichier app/Http/Controllers/MessageController.php. Nous allons l’éditer après avoir défini les routes.
Définissons les routes « message » au fichier routes/web.php :
Route::get("message", "MessageController@formMessageGoogle");
Route::post("message", "MessageController@sendMessageGoogle")->name('send.message.google');
Nous avons les actions suivantes que nous allons décrire au contrôleur MessageController.php. :
Le formulaire sur la vue message-google.blade.php avec un champ « message » où saisir le message à envoyer peut se présenter de la manière suivante :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Le formulaire d'envoi du message</title>
</head>
<body>
@if (session()->has('text'))
<p>{{ session('text') }}</p>
@endif
<form url="{{ route('send.message.google') }}" method="POST" >
<label for="message" >Message</label>
{{ @csrf_field() }}
<p>
<textarea name="message" id="message" rows="4" placeholder="Message à envoyer ici" ></textarea>
{{ $errors->first('message', ":message")}}
</p>
<button type="submit" >Envoyer</button>
</form>
</body>
</html>
Revenons au contrôleur app/Http/Controllers/MessageController.php :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//Importation des classes pour le mail
use App\User;
use Illuminate\Support\Facades\Mail;
use App\Mail\MessageGoogle;
class MessageController extends Controller
{
// Le formulaire du message
public function formMessageGoogle () {
return view("forms.message-google");
}
// Envoi du mail aux utilisateurs
public function sendMessageGoogle (Request $request) {
#1. Validation de la requête
$this->validate($request, [ 'message' => 'bail|required' ]);
#2. Récupération des utilisateurs
$users = User::all();
#3. Envoi du mail
Mail::to($users)->bcc("wilo.ahadi@gmail.com")
->queue(new MessageGoogle($request->all()));
return back()->withText("Message envoyé");
}
}
Résumons tout. Pour envoyer un mail dans un projet Laravel en utilisant le serveur SMTP Google, nous avons :
Portez-vous bien ! 😉
Cette publication vous a plu ?
Partagez-la avec vos ami(e)s sur les réseaux sociaux.
Wilo Ahadi, l'auteur
Passionné de l'informatique, je suis spécialiste en techniques des systèmes et réseaux, développeur web et mobile, infographiste et designer, ... J'aime partager mon expérience en formant sur la plateforme Akili School
Voir profil
Commentaires