Laravel - Envoyer un e-mail (ou courriel)

11 juin 2018 - : MVC Laravel - : Pas de commentaire

Laravel - Envoyer un e-mail (ou courriel)

Il est régulièrement nécessaire de communiquer avec les visiteurs de votre site web. Laravel propose différents outils pour faciliter cette communication.

Avant toute chose, il est nécessaire de configurer correctement Laravel pour qu'il utilise le bon service d'envoi d'e-mails (SMTP, sendmail...)

Nous allons utiliser php sendmail dans les exemples ci-dessous, il faut donc modifier quelques fichiers pour la configuration.

Le fichier .env

Dans ce fichier, nous allons préciser quel driver doit être utilisé. Remplacer smtp par sendmail

MAIL_DRIVER=sendmail

Le fichier mail.php

Dans le fichier mail.php présent dans le dossier config, nous devons faire la même modification.

'driver' => env('MAIL_DRIVER', 'sendmail'),

Mais il peut être nécessaire également de modifier quelques lignes complémentaires

    'from' => [
        'address' => env('MAIL_FROM_ADDRESS', 'votremail@votredomaine.fr'),
        'name' => env('MAIL_FROM_NAME', 'Nom de l\'expéditeur'),
    ],

Créer la classe "Mailable"

Afin de pouvoir gérer les e-mails, nous devons créer une classe spécifique à Laravel lui indiquant les différentes informations concernant le mail.

Pour ce faire, nous allons exécuter la commande artisan suivante

php artisan make:mail contactMail

Ceci aura pour résultat de créer le fichier contactMail.php dans le dossier app/Mail

<?php

namespace App\Mail;

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

class contactMail extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        //
    }
}

Ce fichier peut être assimilé au "contrôleur" d'e-mails.

Nous appellerons donc une vue, qui sera l'e-mail lui-même.

Voici un exemple de fonction build

    public function build()
    {
        return $this->subject('Votre e-mail à Mon Site') // ceci sera le sujet de l'e-mail
                    ->view('emails.contactMail'); // Ceci est le fichier contactMail.blade.php traité ci-après
    }

La vue

Le contenu de l'e-mail sera un fichier html (blade) contenu dans le dossier resources/views/emails

Dans cet exemple, il s'agit du fichier contactMail.blade.php

Le contenu de ce fichier pourraît être le suivant

<!DOCTYPE html>
<html>
<head>
    <title>Nous contacter</title>
</head>
 
<body>
Bonjour,
<br/>
Votre e-mail a bien été envoyé à notre équipe.
<br/>
Merci pour votre confiance.
<br/>
Monsite.fr
</body>
 
</html>

L'envoi de l'e-mail

L'envoi de l'e-mail s'effectue depuis un contrôleur. Ce contrôleur devra utiliser la classe contactMail et avoir accès à la façade Mail.

Il conviendra donc d'y ajouter préalablement les lignes suivantes

use Illuminate\Support\Facades\Mail;
use App\Mail\contactMail;

Puis, depuis une méthode de votre contrôleur, l'envoi de l'e-mail s'effectue de la façon suivante :

Mail::to('destinataire@domaine.fr')->send(new contactMail());			

Et voilà, enjoy ;-)

Commentaires

Pas encore de commentaire

Laisser un commentaire