En tant que développeur informatique, Il nous arrive souvent de mettre en place une fonctionnalité liée à un email — exemple: envoi d’un email de confirmation à la soumission d’un formulaire.
Aussi, on aimerait bien tester plusieurs choses sur cette fonctionnalité :
- Les caractères contenus dans l’objet du mail sont-ils bien encodés ?
- Les images dans le corps du mail sont-elles affichées correctement ?
- Les destinataires que nous avons spécifiés dans notre script sont-ils bien affichés dans le champ “To” ou reçoivent-ils tous le mail envoyé ?
- Les pièces jointes ont-elles été bien ajoutées ?
- etc…
Lorsqu’on travaille en local, Ce test est assez fastidieux. Des solutions existent. Cependant, la mise en place est moins aisée.
On peut par exemple :
- Configurer un smtp externe par exemple — l’adresse smtp.gmail.com, notre adresse gmail comme identifiant et le mot de passe de notre adresse email — On ajoute ces informations dans notre fichier de configuration php (php.ini) et le tour est joué.
- Configurer Pegasus Mail et Mercury . Ce qui nous contraint à créer des utilisateurs locaux. Ces utilisateurs doivent avoir l’adresse : moi@localhost. Il va falloir également modifier dans nos scripts. Ce n’est pas vraiment top comme solution.
- Ou utiliser maildev. Et là, on va être bien…
Nous nous intéresserons à maildev dans cet article. Parce que maildev est facile à mettre en place. Elle est intuitive, simple et claire. De plus, elle est développée en nodejs.
Maildev
est une application nodejs. Elle intercepte le port smtp ( généralement ce port a le numéro : 25 ) . Elle redirige ensuite les mails écoutés par ce port vers l’application maildev.
Avec maildev, il est possible de :
- Visualiser le format de l’email en texte brut ou en html.
- Tester l’affichage de l’email sur n’importe quelle taille d’écran — un téléphone par exemple ou une tablette.
- Recevoir un email avec des pièces jointes.
- Exporter un email au format .eml
- …
Maildev peut être utilisé de 2 façons:
- via une interface en ligne accessible via une URL — exemple: http://localhost:8001/#/
- Dans le code source javascript d’une application.
Il est possible d’installer maildev :
- via nodejs
npm install -g maildev
et ensuite executer la commandemaildev
( depuis n'importe quel dossier) pour la lancer - Via docker
docker pull djfarrelly/maildev
puis executer la commandedocker run -p 1080:80 -p 1025:25 djfarrelly/maildev
( depuis n'importe quel dossier) pour la lancer. - Via git et nodejs
git clone git@github.com:djfarrelly/MailDev.git
puisnpm install -g ./maildev
et ensuite executer la commandemaildev
( depuis n'importe quel dossier) pour la lancer.
Nous choisissons la méthode d’installation via docker. Nous allons nous servir de docker-compose plutôt que d’utiliser la commande 2 dans la liste ci-dessus.
Docker compose ( ou Compose) est un outil pour définir et lancer un container Docker multi-applications. Un fichier yaml est utilisé pour configurer les différents services à lancer. Il est ensuite possible de lancer tous les services configurés grâce à une commande.
Nous créons 2 services :
php7.3 nous permet de tester un script php pour l’envoi de mail.
Créons un fichier docker-compose.yml et ajoutons le contenu suivant :
Nous allons ensuite définir notre environnement pour le service phpt3. Cet environnement se définit dans un fichier Dockerfile que nous allons placer dans le dossier dockerapps/php/ Ce dossier étant relatif à docker-compose.yml.
Exemple: Si on a créé le fichier docker-compose.yml ici C:\docker\docker-compose.yml
On aura l’aroborescence suivante :
- C:\docker\docker-compose.yml
- C:\docker\dockerapps\php
DockerFile est un fichier texte. Il contient des instructions (lignes de commandes) qui seront lues par Docker pour construire l’image définie dans notre fichier docker-compose.yml.
Notre Dockerfile contiendra les instructions suivantes :
- Installation de quelques packages : ssmtp, mailutils, vim, curl…
- Installation de php7.3-fpm et de ses extensions : GD, mysqli, zip, intl
- Création d’un fichier additionnal.ini qui permet de surcharger une directive déclarée dans php.ini
- Installation de composer
- Configuration du sendmail pour pouvoir utiliser maildev
Voici son contenu
dockerapps/php/additionnal.ini
Grâce aux 2 commandes suivantes :
maildev
Ouvrir un navigateur et aller à l’URL http://localhost:8003/
Tester l’envoi de mail
Créons un fichier nommé test_mail.php
comme ceci
Et executer ce fichier en ligne de commande grâce à l’exécutable php comme ceci — par exemple
puis vérifier le résultat dans http://localhost:8003/
Et voici le résultat dans maildev
Originally published at https://passions.miary.dev on August 30, 2019.