14 octobre 2015

Envoyez des mails avec Laravel 5.1 et Mailgun

Par Jean-Marc Amon

Mailgun est une API pour la gestion des e-mails pour vos applications Web. Il est possible d’envoyer gratuitement 10.000 e-mails chaque mois ce qui est un service incroyable pour les petites et moyens sites qui veulent supprimer les complexités de traiter avec les serveurs de messagerie et de routage.

Laravel

Laravel intègre nativement Mailgun avec une poignée d’autres fournisseurs de messagerie et serveurs de messagerie SMTP. Cela rend incroyablement facile à configurer et à passer sur la tâche ardue de l’envoi de courrier à des gens qui le font pour gagner leur vie.

 

 laravel_php

Configuration du fichier .env

Laravel 5 introduit une meilleure façon de gérer les variables d’environnement en utilisant la bibliothèque vlucas/dotenv  avec son installation par défaut. Cela permet à l’application d’appeler les variables d’environnement à partir d’un fichier .env si elle existe, ou les variables d’environnement, ou une valeur par défaut dans le cas échant. Laravel contient des variables d’environnement de messagerie mis en œuvre par défaut dans le fichier .env.example, que vous pouvez utiliser pour rendre le processus un peu plus facile. Si pendant le tutoriel vous remarquez la fonction env () qui prend une variable d’environnement et une valeur par défaut, vous pouvez remplacer cela avec la valeur dans votre fichier .env.

C’est parti

Comme mentionné, Laravel 5 a eu un peu de changement dans l’architecture, mais cela est fait pour le mieux. Tous les fichiers de configuration sont maintenant dans un simple dossier de config dans la racine de l’application. Ici, vous pouvez trouvez deux de ceux que nous utiliserons dans config/mail.php  et config/services.php . Si vous utilisez un service de contrôle de source, vous aurez probablement envie de ne pas mettre vos clés et mots de passe secrets dans ces fichiers, à la place, je vous recommande de les mettre dans un  fichier .env, ou d’utiliser les variables d’environnement.

config/mail.php

C’est dans ce fichier que nous avons la liste des configurations de la messagerie générale que la fonction mail devra utiliser dans votre application. Ce fichier est très bien commenté, alors assurez-vous de bien le lire pour comprendre. Nous allons commencer avec la clé driver , qui précise quel driver mail nous allons utiliser dans notre application. Pour cet exemple, nous allons utiliser mailgun, vous pouvez l’ajouter  ici ou l’ajouter à votre fichier .env comme ceci MAIL_DRIVER=mailgun .

Pour le host  nous utiliserons smtp.mailgun.org , qui est aussi dans votre fichier .env (MAIL_HOST=smtp.mailgun.org). Le port par défaut est 587, qui ne devrait pas être modifié, si vous voulez vous pouvez le configurer dans votre fichier .env (MAIL_PORT)

Le from  est le mail  à partir duquel seront envoyés les e-mails de votre application par défaut, si vous ne le spécifiez pas lors de l’envoi des mails. Ceci est tout simplement un e-mail et le nom que vous voulez voir apparaitre dans vos mails.

La clé username  va être trouvé à mailgun.com, et ressemble généralement a ceci example@mailgun.org.

Sur la même page, vous pouvez trouver la clé de password , en vertu de mot de passe par défaut, ce qui sera probablement une chaîne de caractères aléatoire de chiffres et de lettres (par exemple poiu0987dfgh).

Enfin, assurez-vous que la clé pretend  est définie sur false, car cela place vos mais dans votre fichier log (ce qui est utile pour les tests, mais ne déclenchera pas Mailgun donc le mail ne sera pas envoye).

laravel

config/services.php

Ici vous aurez juste besoin de renseigner le domaine que vous avez configurer sur Mailgun et le secret aussi disponible sur Mailgun:

'mailgun' => array(
    'domain' => 'jamie.sh',
    'secret' => 'key-1234567891234-13337-zxcqwea73zl9',
),

Envoi de l’email

Nous pouvons maintenant envoyer nos mails. La fonction complète très bien documenté sur la page de documentation pour l’envoi de mail. Pour envoyer un simple courrier  question de vérifier que ça fonctionne bien, vous pouvez simplement utiliser la fonction suivante (qui ne nécessitera pas une vue personnalisée).

Mail::raw('Laravel with Mailgun is easy!', function($message)
{
    $message->to('foo@example.com');
});

N’oubliez pas les commentaires si quelque chose ne marche pas.