Guide complet sur l’envoi des mails avec Laravel

David Yao
David Yao
Jan 7 · 8 min read

L’envoi de courriels dans des applications Web est devenu essentiel. Le marketing, les notifications, les newsletters, les publicités, etc. sont quelques-unes des raisons pour lesquelles nous envoyons des courriels à nos clients. Je dirais que la majorité des sites Web envoient des courriels automatisés au moins via un formulaire “Contactez-nous”.

Explorons les nombreuses manières possibles d’envoyer des courriels dans une application Laravel.

Choisir un fournisseur de service de messagerie

Vous vous demandez peut-être pourquoi vous devez faire appel à un service alors que vous pouvez simplement vous lancer dans le hardcore avec SMTP. L’ancienne méthode fonctionne bien, sans doute, mais si vous voulez vraiment quelque chose d’impressionnant, robuste, évolutif et économique , alors un fournisseur de services est meilleur car il fait tous les travaux difficiles et vous donne juste un point final auquel votre programme peut parler,

Nous allons examiner plusieurs fournisseurs possibles et comment les configurer dans une application Laravel. En parlant de cela, installez une nouvelle application Laravel et laissez le fichier config/services.phpouvert dans votre éditeur de code préféré.

Mailgun

  1. Inscrivez-vous pour un compte si vous ne l’avez pas.
  2. Vérifiez votre email et votre numéro de téléphone.
  3. Vous serez redirigé vers votre tableau de bord.
  4. Localisez votre clé API et votre domaine

Mailtrap

Mailtrap est génial pour le développement et les tests. Il n’a pas été conçu pour envoyer des courriels lors de la production.

  1. Inscrivez-vous via https://mailtrap.io/register/signup
  2. Vérifiez votre compte si nécessaire
  3. Accédez à vos boîtes de réception via https://mailtrap.io/inboxes
  4. Stocker les informations d’identification SMTP dans un endroit sûr

Mandrill

  1. S’inscrire
  2. Configurer un nom de domaine
  3. Aller aux paramètres du menu de gauche
  4. Cliquez sur Ajouter une clé API
  5. Ajouter l’option Mandrill dans le
    fichier config/services.php
'mandrill' => [
'secret' => env('MANDRILL_KEY'),
],

Il existe plusieurs autres options, y compris Amazon SES, mais nous allons nous concentrer seulement sur quelques-unes. Ils ont des configurations similaires, alors restons-en à apprendre avec ce que nous avons.

Configurer nos services

Notre config/services.phpdispose de toutes les configurations pour les principaux services externes nécessaires à notre application. Il est également recommandé que si Laravel ne fournit aucun service, vous devez vous en tenir au modèle de conception consistant à utiliser le
fichier config services pour configurer votre application.

'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
],

'mandrill' => [
'secret' => env('MANDRILL_KEY'),
],

'ses' => [
'key' => env('SES_KEY'),
'secret' => env('SES_SECRET'),
'region' => 'us-east-1',
],

'sparkpost' => [
'secret' => env('SPARKPOST_SECRET'),
],

'stripe' => [
'model' => App\User::class,
'key' => env('STRIPE_KEY'),
'secret' => env('STRIPE_SECRET'),
],

Notez que Mailtrap est manquant ici. Il utilise SMTP et est fourni par défaut dans chaque installation Laravel car il est conçu à des fins de test.

Une pratique vraiment désapprouvée est de stocker les informations d’identification dans des codes car elles peuvent fuir entre de mauvaises mains, notamment lors du déplacement d’une base de code dans un VCS. Pour cette raison, Laravel utilise un
fichier .env pour stocker ses informations d'identification et ses variables d'environnement:

APP_ENV=local
APP_DEBUG=true
APP_KEY=[APPLICATION_KEY]
APP_URL=http://localhost

DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp

MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=[MAILTRAP_USERNAME]
MAIL_PASSWORD=[MAILTRAP_PASSWORD]
MAIL_ENCRYPTION=null

MAILGUN_DOMAIN=[MAILGUN_DOMAIN]
MAILGUN_SECRET=[MAILGUN_SECRET]

MANDRILL_KEY=[MANDRILL_KEY]

Vous pouvez remplacer les noms d’utilisateur, mots de passe, clés, domaines et secrets que vous avez obtenus lors de votre inscription aux services de messagerie.

Définir une option par défaut

Comme je l’ai déjà mentionné, nous ne pouvons pas utiliser tous les services en même temps. Dans ce cas, même après avoir configuré plusieurs fournisseurs, nous devons toujours indiquer à Laravel lequel utiliser:

//SMTP/Mailtrap
MAIL_DRIVER=smtp

//Mailgun
MAIL_DRIVER=mailgun

//Mandrill
MAIL_DRIVER=mandrill

//etc

Envoyer des emails

Configurer les services n’envoie pas réellement les courriels, mais c’est une étape incroyable que nous avons franchie ensemble. Nous pouvons faire mieux. Envoyez maintenant un email.

Une approche de base

Nous allons utiliser l’approche RESTful pour envoyer les emails car c’est la norme. Alors, préparez votre postman à faire quelques travaux.

Nous n’avons pas besoin d’un modèle ou d’une vue avec la direction que nous prenons. Au lieu de cela, nous avons juste besoin d’un contrôleur et d’une route. Créez un contrôleur nommé EmailController:

php artisan make:controller EmailController

Maintenant, ajoutez une route simple à routes/web.php:

Route::post('/send', 'EmailController@send');

Notre route pointe vers le contrôleur que nous avons créé et demande la
méthode d’action send pour traiter la demande. Continuons et créons la
méthode d'action send:

Remarque: Les méthodes d’action sont des méthodes d’un contrôleur qui gèrent une demande.

public function send(Request $request){
//codez votre logique ici
}

C’est une méthode de base qui attend et qui est prête à être concrétisée. Nous avons également indiqué Requestsi nous avons besoin de quoi que ce soit avec l'objet request.

Pour envoyer des emails HTML, nous devons créer un modèle pour cela. Créez un fichier send.blade.phpdans resources/views/emailsavec les éléments suivants:

<html>
<head></head>
<body style="background: black; color: white">
<h1>{{$title}}</h1>
<p>{{$content}}</p>
</body>
</html>

Retour à la méthode d’action. Il est temps d’ajouter la logique d’envoi de courrier qui peut être réalisée à l’aide de la
façade Mail:

public function send(Request $request)
{
$title = $request->input('title');
$content = $request->input('content');

Mail::send('emails.send', ['title' => $title, 'content' => $content], function ($message)
{

$message->from('me@gmail.com', 'Christian Nwamba');

$message->to('chrisn@scotch.io');

});


return response()->json(['message' => 'Request completed']);
}

La façade Mail qui est utilisée pour gérer les emails dans Laravel fournit plusieurs méthodes, notamment send(). La méthode send() prend 3 paramètres: une vue, des données à lier à la vue et une fermeture. Vous pouvez configurer le courrier comme vous le souhaitez dans la fermeture.

Rendez-vous à Postman et faites une demande de publication /sendavec titleet contentcomme indiqué ci-dessous:

Ci-dessous, une image de ce courrier qui arrive dans Mailtrap.

Nous pouvons configurer toutes les propriétés d’un email directement dans la fermeture. Voici des options disponibles:

$message->from($address, $name = null);
$message->sender($address, $name = null);
$message->to($address, $name = null);
$message->cc($address, $name = null);
$message->bcc($address, $name = null);
$message->replyTo($address, $name = null);
$message->subject($subject);
$message->priority($level);
$message->attach($pathToFile, array $options = []);

Expérimentons une autre des fonctionnalités qui est $message->attach()

Joindre des fichiers

Joindre des fichiers est très simple. Nous utilisons simplement la méthode attach() et fournissons un chemin de fichier.

public function send(Request $request)
{
$title = $request->input('title');
$content = $request->input('content');
//Grab uploaded file
$attach = $request->file('file');

Mail::send('emails.send', ['title' => $title, 'content' => $content], function ($message) use ($attach)
{

$message->from('me@gmail.com', 'Christian Nwamba');

$message->to('chrisn@scotch.io');

//Attach file
$message->attach($attach);

//Add a subject
$message->subject("Hello from Scotch");

});

Nous avons demandé à télécharger un fichier via un formulaire et à le joindre au courrier. Notez que nous avons également ajouté un objet à l’e-mail.

Optimiser avec les files d’attente

Vous pouvez maintenant utiliser les files d’attente pour optimiser l’envoi d’emails. C’est simple comme bonjour. Au lieu d’envoyer avec la méthode send(), nous envoyons avec la méthode queue():

public function send(Request $request)
{
//Using queues is better
Mail::queue('emails.send', ['title' => $title, 'content' => $content], function ($message) use ($attach)
{


});
}

Rappelez-vous que nous devons exécuter la commande listen sur les files d’attente avant de pouvoir les distribuer:

php artisan queue:listen

En production, il est déconseillé d’utiliser listenen raison de la forte utilisation de son processeur. Il est préférable d’utiliser worket de passer l’option --daemon:

sude nohup php artisan queue:work --daemon --tries=3

Bonus: notifications par e-mail en masse avec MailChimp

Comme cet article traite de l’envoi d’e-mails, il serait bon d’envisager d’envoyer des e-mails en masse. Mailchimp est l’outil le plus populaire pour gérer ce problème. Essayons-le.

Configurer MailChimp

Configurer Mailchimp implique deux étapes: la création du compte et la configuration du projet Laravel. Pour créer un compte MailChimp, rdv sur la page d’inscription, inscrivez — vous et vérifiez votre compte si nécessaire.

Créez ensuite une liste de vos abonnés. Dans un projet réel, vous ajouteriez des utilisateurs à la liste de manière programmée à l’aide de l’API, mais nous pouvons simplement aller de l’avant et en créer certains via le tableau de bord, comme indiqué ci-dessous.

Maintenant, prenez l’identifiant de la liste en allant dans Paramètres> Nom de la liste et valeurs par défaut. Créez également et obtenez votre clé API à partir de Utilisateur> Comptes> Extras> Clés API. “Utilisateur” représente votre nom d’utilisateur, qui se trouve dans la barre de navigation.

Retournez dans le projet Laravel et stockez la clé et l’identifiant dans le fichier .env:

MAILCHIMP_KEY=[KEY]
MAILCHIMP_LIST_ID=[ID]

Extrayez ensuite le SDK PHP de Mandrill du composeur:

composer require mailchimp/mailchimp

Envoi de campagnes

Les e-mails en masse de Mailchimp sont identifiés comme des campagnes. Laissez-nous créer une autre méthode d’action simple pour gérer l’envoi de messages en masse à notre liste d’abonnés:

public function notify(Request $request){

//List ID from .env
$listId = env('MAILCHIMP_LIST_ID');

//Mailchimp instantiation with Key
$mailchimp = new \Mailchimp(env('MAILCHIMP_KEY'));

//Create a Campaign $mailchimp->campaigns->create($type, $options, $content)
$campaign = $mailchimp->campaigns->create('regular', [
'list_id' => $listId,
'subject' => 'New Article from Scotch',
'from_email' => 'pub@gmail.com',
'from_name' => 'Scotch Pub',
'to_name' => 'Scotch Subscriber'

], [
'html' => $request->input('content'),
'text' => strip_tags($request->input('content'))
]);

//Send campaign
$mailchimp->campaigns->send($campaign['id']);

return response()->json(['status' => 'Success']);
}

Nous utilisons deux méthodes de campagne: create()et send(). La méthode create() provisionne une campagne et retourne un tableau contenant les éléments idde notre campagne. Nous passons ensuite idà la méthode send() pour envoyer les emails. C'est tout!

Allez-y et ajoutez la route supplémentaire:

Route::post('/notify', 'EmailController@notify');

Conclusion

Et voilà, j’espère que ça vous aidera. Cliquez ici pour plus de tutos en Laravel.

  • Merci d’avoir lu ! Si vous avez aimé cet article,
  • Faites un coucou sur : Instagram | Facebook | Twitter |
  • Avez-vous besoin d’aide pour votre projet web ? Ecrivez moi à l’adresse suivante : david@oschool.ci

Originally published at Deviens développeur web.

David Yao

Written by

David Yao

Full Stack Developer. Founder of https://oschool.ci. My goal is to be one of the greatest programming teachers and entrepreneurs in Africa

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade