Outils

Comment tester l’envoi d’e-mails dans son application en local ?

Comment tester l’envoi de ses e-mails dans son application

Lorsque l’on développe des applications, on est très souvent amené à devoir envoyer des e-mails pour générer des rapports, des notifications ou tout simplement des e-mails automatiques.

L’envoi des e-mails est relativement simple.

On renseigne les informations du SMTP à savoir :

  • Le Host
  • Le Port
  • La sécurité
  • Un nom d’utilisateur
  • Un mot de passe

Puis on renseigne toutes les informations minimum pour l’envoi d’un e-mail :

  • L’expéditeur
  • Le destinataire
  • L’objet
  • Le corps de l’e-mail

Tout langage de programmation possède des fonctions d’envoi d’e-mail nativement. C’est donc très simple à mettre en place. 

Mais lorsque l’on développe et qu’on veuille tester plusieurs envois d’e-mail d’affilés à un même destinataire, cela peut être très problématique.

Vous n’avez pas envie que cette personne reçoive plusieurs fois le test de l’e-mail en question et vous voulez vous le vérifier. Mais vous souhaitez que le test soit très proche d’un envoi réel.

La méthode bricolage

Alors, comment faire ? Il y a une méthode qui, avec le recul, était très bricolage et que j’ai utilisée pendant très longtemps qui consistait à s’envoyer l’e-mail à sa propre adresse e-mail plutôt qu’au destinataire final. 

On définit une variable d’environnement du genre DEBUG_EMAIL à true ainsi qu’une autre EMAIL_ADDRESS_DEBUG qui contient votre adresse e-mail qui recevra cet e-mail. Et à chaque fois que l’on envoie un e-mail on vérifie si notre DEBUG_EMAIL est activé et si c’est le cas on remplace tous les destinataires par l’adresse e-mail définie dans EMAIL_ADDRESS_DEBUG.

Même si cette méthode est très simple à mettre en place et fait le job, elle contient quand même beaucoup d’inconvénients : 

  • C’est du bricolage
  • Chaque destinataire est remplacé par votre adresse donc vous ne recevrez qu’un seul e-mail au lieu d’en recevoir autant qu’il n’y a de destinataire
  • Cela fait du code supplémentaire à gérer et à maintenir utile uniquement pendant votre phase développement
  • Chaque développeur va utiliser sa boîte e-mail individualisant les tests plutôt de les centraliser

C’est un début, mais c’est loin d’être top, mais heureusement il existe des solutions alternatives plus simple et plus pro à utiliser et je vais vous en faire découvrir 2 d’entre elles.

MailDev, la solution de fake STMP local

Le principe de MailDev est simple : il vous permet d’avoir un faux serveur SMTP. C’est-à-dire qu’il va pouvoir capter les e-mails de vos applications que vous envoyez, mais qu’il ne va jamais les relayer aux destinataires finaux.

Il existe plusieurs solutions pour obtenir un serveur faux SMTP en local, mais MailDev dispose d’une interface de webmail assez jolie (oui il vous en faut une pour visualiser vos tests d’envois) et il est très simple à mettre en place.

Il est codé en Node.js, ce qui veut dire que si vous ne l’avez pas déjà fait vous allez devoir l’installer au préalable (pour bénéficier en même temps de NPM)

Il s’installe donc via une simple commande npm : 

npm install -g maildev

Et pour le lancer, il suffit de taper la commande : 

maildev

Rajoutez un -h derrière la commande pour obtenir toutes les options disponibles à la commande pour le paramétrer si vous le souhaitez.

Le serveur MailDev utilise 2 ports par défaut : 

  • Le port 1025 qui est le port SMTP pour capturer les e-mails
  • Le port 1080 qui est utilisé par le webmail proposé MailDev pour visualiser les e-mails

Donc pour afficher le webmail dans votre navigateur, il suffit de taper http://localhost:1080 dans votre navigateur.

Pour configurer le SMTP de votre application, il suffit de renseigner ses informations : 

  • le Host : localhost
  • le Port : 1025

Et c’est tout ! Pensez néanmoins à désactiver la sécurité TLS pour l’envoi de vos e-mails via MailDev.

C’est aussi simple à mettre en place qu’à utiliser.

Le principal avantage de cela, c’est que vous totalement indépendant. Vous pouvez développer sans connexion Internet, vous pourrez toujours tester vos e-mails. Néanmoins, cela rend compliquer la mutualisation des tests pour une équipe de développeur (à moins de rendre accessible vers l’extérieur votre serveur MailDev).

Mais j’ai une autre solution alternative à MailDev qui vous permettra de mutualiser vos envois de test sans installation.

Ethereal, le service de fake SMTP

Ce service gratuit est tout simplement génial et très facile d’utilisation. Il suffit de se rendre sur le site Internet de Ethereal et de cliquer sur le bouton bleu « Create Ethereal Account » et c’est tout ! Votre compte est créé automatiquement et Ethereal affiche ses informations à l’écran (notez-les bien, car vous n’aurez aucun moyen de les récupérer. Vous serez obligé de créer un nouveau compte).

En plus des informations de connexion en mode SMTP, IMAP et POP3, vous avez des exemples de codes pour utiliser ses informations, mais globalement vous devez renseigner comme information :

  • Le Host : smtp.ethereal.email
  • Le Port : 587
  • La sécurité : TLS
  • Un nom d’utilisateur : celui qui vous a été communiqué
  • Un mot de passe : celui qui vous a été communiqué

Vous aurez la possibilité de vous connecter avec votre nom d’utilisateur et votre mot de passe pour accéder à un webmail (beaucoup moins jolie que MailDev). Je n’utilise pas personnellement le webmail. Je préfère renseigner les informations de Ethereal directement dans mon client de messagerie, comme une vraie adresse e-mail, car je trouve cela plus pratique.

Le principal inconvénient (qui peut ne pas en être un pour certains), c’est que ce service vide totalement les boîtes e-mail chaque jour. Donc si vous avez fait des tests d’e-mails aujourd’hui, vous ne pourrez les consulter qu’aujourd’hui. Mais on ne va pas se plaindre pour un service gratuit.

Un autre inconvénient est que vous devez avoir une connexion Internet active pour utiliser le SMTP (cela va de soi).

Mais un avantage non négligeable est que vous pouvez utiliser cette solution tant en local dans votre phase de développement que lors de vos tests sur votre phase de staging.

Alors, au final quelle solution choisir ?

Je pense que ce sera surtout une question de goût, car les 2 solutions se valent tout autant. Personnellement, j’utilise Ethereal quasiment exclusivement depuis que je l’ai découvert. Plus rapide et plus facile à mettre en place (même si MailDev l’est tout autant).

Partager ce contenu
  • 6
    Partages

Leave a Comment

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.