Last active
February 25, 2022 15:38
-
-
Save Descartes310/8f36bdd488a6168e06f5dd5a3b6783db to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Envoyer des emails avec application Laravel :email: | |
Vous avez toujours voulue savoir comment envoyer des emails avec votre application Laravel :confused: ? Vous ne savez pas comment faire :confused: ? | |
Calmez vous :sunglasses: , dans cet article, nous allons présenter étape par étape comment réaliser cela en utilisant vos paramètres SMTP par défauts sans avoir un compte SMTP ou encore acheter un plan SMTP. | |
## Le procéssus | |
Nous allons configurer une application Laravel pour qu'elle puisse envoyer des emails à partir d'un compte Gmail que nous aurons défini. Nous allons avoir un controller qui déclenchera l'envoie de l'email. Il contactera une classe Mailable que nous aurons défini et qui fera appel à la vue portant le contenu de l'email. Un système de gestion d'erreur sera également mis en place pour la récupération des erreurs d'envois d'emails :broken_heart:. | |
## Configuration de Laravel | |
Si vous jetez un coup d'oeil dans votre fichier de configuration `.env`, vous verez la section qui concerne le paramétrage des mails. | |
``` | |
MAIL_DRIVER=smtp | |
MAIL_HOST=smtp.mailtrap.io | |
MAIL_PORT=2525 | |
MAIL_USERNAME=null | |
MAIL_PASSWORD=null | |
MAIL_ENCRYPTION=null | |
``` | |
Les valeurs correspondent au prestataire utilisé. | |
Au niveau du driver, le plus classique est certainement le SMTP mais vous pouvez aussi utiliser mail, mailgun, ses, sparkpost, etc… | |
Vous devez correctement renseigner les paramètres pour que ça fonctionne selon votre contexte (en local avec le SMTP de votre prestataire, en production avec la fonction mail de PHP ou d’un autre système…). | |
Cette section peut être remplie de la facon suivante: | |
``` | |
MAIL_DRIVER=smtp | |
MAIL_HOST=smtp.gmail.com | |
MAIL_PORT=587 | |
MAIL_USERNAME=MON_ADRESSE_GMAIL | |
MAIL_PASSWORD=LE_MOT_DE_PASSE_DE_CETTE_ADRESSE | |
MAIL_ENCRYPTION=tls | |
``` | |
## Les classes Mailable | |
En Laravel, chaque type de mail envoyé par votre application (Contact, Newsletter, Notification, Factures, etc...) est représenté comme une classe `Mailable`. Ces classes sont stockées dans le répertoire `app/Mail`. Il peut arriver que ce repertoire ne soit pas présent par défaut dans votre application. Pas de panique :fearful: , il sera généré pour vous lorsque vous créerez votre première classe Mailable à l'aide de la commande `make:mail`. Nous allons créer une mail de Bienvenue pour notre application, nous allons donc créer la classe Mailable Welcome à l'aide de la commande suivante: | |
`php artisan make:mail Welcome` | |
Après ceci, vous retrouverez la classe `Welcome.php` dans le dossier `app/Mail` avec le contenu suivant: | |
``` | |
<?php | |
namespace App\Mail; | |
use Illuminate\Bus\Queueable; | |
use Illuminate\Mail\Mailable; | |
use Illuminate\Queue\SerializesModels; | |
use Illuminate\Contracts\Queue\ShouldQueue; | |
class Welcome 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('view.name'); | |
} | |
} | |
``` | |
Nous remarquons la méthode build(). On voit qu’on retourne une vue, celle-ci doit comporter le code pour le contenu de l’email. | |
On commence par changer le nom de la vue par `emails.welcome`: ceci signifie que le contenu du mail sera situé dans la vue `resources/views/emails/welcome.blade.php` avec pour contenue le suivant: | |
``` | |
<!DOCTYPE html> | |
<html lang="fr"> | |
<head> | |
<meta charset="utf-8"> | |
</head> | |
<body> | |
<h2>Prise de contact sur Laravel Cameroun</h2> | |
<p>Bienvenue sur le site Laravel Cameroun :</p> | |
<ul> | |
<li><strong>Votre nom</strong> : {{ $datas->name }}</li> | |
<li><strong>Ecrit par</strong> : Descartes Fowo</li> | |
</ul> | |
</body> | |
</html> | |
``` | |
## Transmission des données à la vue | |
Nous avons deux facons de transmettre les données à la vue, nous allons utiliser la plus simple. Il suffit de créer une propriété obligatoirement publique dans la classe « Mailable » et celle-ci sera automatiquement transmise à la vue. Voici le nouveau code de notre classe Welcome:: | |
``` | |
<?php | |
namespace App\Mail; | |
use Illuminate\Bus\Queueable; | |
use Illuminate\Mail\Mailable; | |
use Illuminate\Queue\SerializesModels; | |
use Illuminate\Contracts\Queue\ShouldQueue; | |
class Welcome extends Mailable | |
{ | |
use Queueable, SerializesModels; | |
/** | |
* Elements de données | |
* @var array | |
*/ | |
public $datas; | |
/** | |
* Create a new message instance. | |
* | |
* @return void | |
*/ | |
public function __construct($datas) | |
{ | |
$this->datas = $datas; | |
} | |
/** | |
* Build the message. | |
* | |
* @return $this | |
*/ | |
public function build() | |
{ | |
return $this->from('adressegmailsource@gmail.com') | |
->subject('Bienvenue sur le site Laravel Cameroun') // Objet du mail | |
->view('emails.welcome'); | |
} | |
} | |
``` | |
J’en ai aussi profité pour préciser l’adresse de l’expéditeur avec la méthode `from` et l'objet de l'email avec la méthode `subject`. On pourrait attacher un document avec `attach`, faire une copie avec `cc`; etc… | |
J’ai créé la propriété publique $datas qui sera renseignée par l’intermédiaire du constructeur. | |
## Configuration du compte Google | |
Connectez vous à votre compte Gmail et cliquez sur le boutton `Compte Google`. Ce boutton est affiché lorsque vous cliquez sur votre photo de profil dans votre Dashboard Gmail. | |
Une fois que vous êtes dans votre compte, cliquez sur `Sécurité` et scrollez vers le bas, vous trouverez `Accès aux applications moins sécurisés`. Activez le boutton radio qui vous sera présenté. | |
![Accès aux applications moins securisées](https://miro.medium.com/max/1400/1*D6-UGuqcgYKM6DsZrIrntA.png) | |
## Le controller MailController | |
Nous allons écrire un controller qui sera chargé d'envoyer nos mails. | |
Nous créons le controller avec la commande `php artisan make:controller MailController` et nous définissons le contenu suivant: | |
``` | |
<?php | |
namespace App\Http\Controllers; | |
use Illuminate\Support\Facades\Mail; | |
use Illuminate\Http\Exceptions\HttpResponseException; | |
use App\Mail\Welcome; | |
class MailController extends Controller | |
{ | |
public function sendMail() | |
{ | |
$datas = new \stdClass(); | |
$datas->name = 'Descartes Fowo; | |
try { | |
Mail::to('adresseemailcible@gmail.com)->send(new Welcome($datas)); | |
return response()->json('Le mail a été envoyé'); | |
} | |
catch (Exception $e) { | |
throw new HttpResponseException( | |
response()->json([ | |
'message'=>'Mail non envoyé' | |
], 500)); | |
} | |
} | |
} | |
``` | |
Super :sunglasses: :sunglasses: :sunglasses:, nous avons terminé le tutoriel. Vous pouvez créer une route de votre choix pour commencer l'envoie des mails depuis votre application Laravel. | |
## Auteur | |
Descartes Fowo | |
Developpeur web & app junior | |
descartesouambo@gmail.com | |
https://github.com/Descartes310 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment