Skip to content

Instantly share code, notes, and snippets.

@Descartes310
Last active February 25, 2022 15:38
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Descartes310/8f36bdd488a6168e06f5dd5a3b6783db to your computer and use it in GitHub Desktop.
Save Descartes310/8f36bdd488a6168e06f5dd5a3b6783db to your computer and use it in GitHub Desktop.
# 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