Dans ce chapitre nous allons mettre en place le formulaire de contact qui va permettre aux utilisateurs de contacter l'agence lorsqu'ils sont intéressés par les biens. Ce chapitre sera l'occasion de découvrir le système de Mailablequi permet d'envoyer des utilisateurs depuis Laravel.
Configuration
Si vous essayez d'envoyer des emails avec Laravel, par défaut, en mode développement, il est configuré pour écrire les emails envoyés dans le fichier de log. Cette méthode est pratique parce qu'elle vous permet de tester vos emails sans forcément avoir besoin d'un serveur SMTP mais il n'est pas forcément évident de lire ce fichier pour visualiser les emails.
Aussi je vous conseille d'utiliser des outils comme mailhog qui vont vous permettre de créer un serveur SMTP sur votre machine qui sera capable de capturer les emails qui vont être envoyés. Ces outils vous offrent ensuite une interface web, qui ressemble à un client email, dans lequel vous allez pouvoir consulter les emails qui ont été capturés.
Il vous faudra ensuite modifier le fichier d'environnement pour mettre les informations correspondant à cet outil.
Vous pouvez aussi regarder le fichier de configuration config/mail.php pour voir les différents protocoles qui sont supportés et la configuration de base.
Mailable
Pour commencer à gérer l'envoi d'email on doit créer une classe qui va représenter le mail à envoyer
Cette commande va créer une classe qui étend de Illuminate\Mail\Mailable qu'il faudra modifier en fonction de nos besoin. Dans notre cas nous allons modifier le constructeur pour lui passer les informations qui nous intéresse (les données du formulaire ainsi que le bien associé à la demande).
La méthode envelope() permet de définir des attributs sur notre email tandis que la méthode content() permet de définir à quoi va ressembler le contenu de l'email. Pour cette partie contenu on peut définir l'email de différentes manières (text, html ou markdown) en utilisant le chemin vers une vue blade.
L'option markdown est intéréssante car elle permet de construire l'email plus rapidement en n'ayant pas à gérer la structure HTML complexe nécessaire pour un bon fonctionnement sur les différents clients mails.
Envoi
Maintenant que l'on a notre classe qui permet de représenter un email il va falloir l instancier et l'envoyer.
Laravel dispose d'une façade Illuminate\Support\Facades\Mailqui attend en paramètre une instance de Mailable.