hand sending email

Comment démarrer avec un serveur de messagerie pour le développement

Avant, je redoutais de développer du code pour les tâches liées aux e-mails. J’avais toujours l’impression que la mise en place était compliquée et qu’il y avait beaucoup de risques que les choses tournent mal. Lorsque la tâche sur laquelle nous travaillons est encore en cours, nous voulons éviter d’envoyer des e-mails à des personnes extérieures à notre équipe de développement, et même dans ce cas, nous essayons d’éviter d’inonder cette petite liste de personnes d’une avalanche d’e-mails à mesure que des ajustements mineurs sont continuellement apportés et testés.

Ayant travaillé avec plusieurs technologies différentes, j’ai vu un certain nombre d’approches pour gérer cela. Beaucoup de ces approches s’accompagnent de leurs propres problèmes. Je vais commencer par illustrer quelques mauvais exemples, car il est toujours agréable de pouvoir apprendre des erreurs des autres plutôt que d’apprendre à la dure. Ensuite, nous nous pencherons sur ce que je considère comme une bonne façon de gérer les e-mails depuis un environnement de développement.

Accélérez votre processus de développement grâce à un serveur de messagerie dédié aux tests en évitant ces erreurs

Envoi d’e-mails aux enregistrements de la base de données

Dans certains systèmes sur lesquels j’ai travaillé, des e-mails étaient censés être envoyés à des utilisateurs dont les enregistrements figuraient dans la base de données. Souvent, ces enregistrements d’utilisateurs représentaient des données réelles et contenaient donc les adresses e-mail de personnes à qui nous ne devions pas envoyer d’e-mails pendant le processus de test et de développement. Malheureusement, j’ai vu des cas où ces personnes ont reçu des e-mails par erreur. C’est un problème !

Ce problème peut être contourné grâce à un remplacement d’adresse e-mail. Une logique peut être mise en place dans le code pour remplacer une adresse e-mail réelle par une représentation codée en dur de l’adresse e-mail du développeur ; de cette façon, seul le développeur reçoit l’e-mail.

Cela nécessite des modifications du code lui-même, ce qui n’est pas idéal. Cela implique soit de devoir rétablir le code initial une fois qu’il est prêt pour la production, soit de mettre en place une logique de branchement qui détermine s’il est exécuté depuis un environnement de production ou de développement. Bien que cela fonctionne, je pense que nous préférerions tous éviter d’apporter des modifications au code uniquement pour s’adapter à l’environnement dans lequel il est exécuté.

Envoi d’e-mails en masse

Un autre problème que j’ai constaté s’est produit alors que le développeur pensait être en sécurité. Les e-mails n’étaient envoyés qu’à des collègues, mais ils étaient envoyés en masse. Une boucle avait été mise en place pour parcourir la liste des collègues pouvant recevoir l’e-mail. Cela avait été fait afin que chaque personne reçoive son propre e-mail individuel, ce qui est une bonne chose pour ne pas exposer les adresses e-mail des autres.

Malheureusement, pendant le développement, la boucle ne fonctionnait pas correctement et aurait tourné en boucle indéfiniment pendant les tests si elle n’avait pas été interrompue. Lorsque ce problème a été identifié, il était déjà trop tard. Comme les e-mails étaient bel et bien envoyés, le volume considérable de messages envoyés a entraîné la mise sur liste noire du domaine de messagerie de l’expéditeur. C’était un problème majeur !

Comment configurer un serveur de messagerie sécurisé pour un environnement de développement

MailHog

Je n’appréhende plus les tâches liées aux e-mails, et je dois ce nouveau regard sur les choses au fait de disposer des outils adéquats pour gérer les situations de manière plus élégante. Dernièrement, je me suis tourné vers une application appelée MailHog. Il s’agit d’un utilitaire qui fonctionne de manière très similaire à un serveur de messagerie, mais qui capture les e-mails entrants dans une base de données et fournit une interface web pour les consulter au lieu de les transmettre directement au destinataire (il existe toutefois une option permettant de transmettre l’e-mail après l’avoir prévisualisé).

Il existe plusieurs autres utilitaires similaires à MailHog, mais j’ai trouvé que celui-ci était le plus simple à configurer et à utiliser. MailHog est écrit en GoLang, il peut donc être compilé pour pratiquement toutes les plateformes sur lesquelles vous souhaitez l’exécuter. Je suis sous Windows, et il existe un binaire que je peux télécharger et exécuter assez facilement (sans installation). Ils fournissent même un fichier DOCKERFILE pour que vous puissiez l’exécuter via Docker Hub si vous le préférez.

Bonnes pratiques

Lorsque je l’exécute, je l’appelle en utilisant les options suivantes afin qu’il fonctionne selon la configuration que j’ai choisie :

-smtp-bind-addr :2500 -api-bind-addr :8080 -ui-bind-addr :8080

Cela lui indique d’écouter les e-mails sur le port 2500 (la plupart des serveurs de messagerie utilisent le port 25) et me permet de consulter tous les e-mails qu’il a reçus à l’aide d’un navigateur web pointant vers http://localhost:8080

Une fois le service lancé, assurez-vous que votre code sait que votre serveur de messagerie se trouve sur localhost au port 2500, et tous les e-mails qu’il enverra par la suite devraient être interceptés par MailHog. C’est aussi simple que cela !

Une fois la configuration terminée, vous pouvez être sûr de pouvoir consulter les e-mails comme prévu. Le destinataire d’origine de l’e-mail sera conservé, le contenu de l’e-mail pourra être consulté au format HTML ou texte, vous pourrez prévisualiser/télécharger les pièces jointes, etc.

Lors de la mise en place d’un système de distribution d’e-mails, il est toujours recommandé de configurer les détails du serveur de messagerie en un seul endroit. Cela se fait généralement dans un fichier .env, mais toutes les technologies ne permettent pas d’utiliser ce type de configuration. Si vous avez suivi cette bonne pratique, il suffira de mettre à jour ce fichier de configuration lorsque vous ferez passer le projet de l’environnement de développement vers les environnements de test ou de production.

J’espère que cela vous aidera et allégera la charge de travail liée aux tâches de messagerie. Si vous avez besoin d’aide pour mettre en œuvre une solution de ce type, n’hésitez pas à nous envoyer un message.

Retour en haut