Tutoriel Vidéo Maildev Tester l'envoi d'email avec MailDev

Télécharger la vidéo

Tester l'envoi d'emails d'une application web n'est jamais une chose simple. On se retrouve souvent à devoir configurer notre environnement local pour envoyer des emails vers l'extérieur en essayant de contourner les limitations des FAI, ou en passant par un SMTP externe. Le problème, c'est qu'il faudra alors être très prudent afin de ne pas risquer d'envoyer des emails de tests aux utilisateurs.

MailDev, l'équivalent nodejs de la gem Mailcatcher, permet de contourner le problème en lançant un serveur SMTP qui va intercepter tous les emails. Il propose en plus une interface web qui permettra de voir les mails capturés.

Installation

MailDev, fonctionne avec nodejs, ce qui le rend très simple à mettre en place. Si vous ne l'avez pas déjà fait, vous devez commencer par installer nodejs sur votre machine et ainsi avoir la commande npm de disponible.

npm install -g maildev # Utilisez sudo si nécessaire
maildev

Et voila vous n'avez rien de plus à faire ! La commande maildev va lancer un serveur SMTP fonctionnant sur le port 1025 et une interface web accessible depuis le port 1080.

Maintenant vous devez modifier la configuration de votre application web pour que l'envoi d'email se fasse par ce serveur SMTP plutôt que de passer par la fonction mail classique. Par exemple pour CakePHP 3 :

    'EmailTransport' => [
        'default' => [
            'className' => 'Smtp',
            'host' => 'localhost',
            'port' => 1025,
            'timeout' => 30,
            'username' => null,
            'password' => null,
            'client' => null,
            'tls' => null,
        ],

Et voila vous pouvez maintenant envoyer des emails depuis votre application sans vous inquiétez de les voir partir. Ils seront automatiquement capturés par MailDev et visibles sur l'interface web disponible sur le port 1080.

L'interface est proche d'un webmail classique

MailDev & PHP

Si vous le souhaitez, vous pouvez carrément modifier la configuration de PHP pour qu'il envoit les emails en utilisant ce serveur SMTP. Pour cela il vous suffit de modifier le fichier php.ini

[mail function]
SMTP = localhost
smtp_port = 1025

Cette configuration permet donc d'utiliser la fonction mail() classique de PHP, tout en envoyant les mails sur MailDev.

Error: listen EADDRINUSE !

Lorsque j'ai essayé de faire fonctionner MailDev sur Debian je n'ai pas rencontré de problème. En revanche, sur Windows je suis tombé sur cette erreur qui signifie, tout simplement, que le port est déjà utilisé.
Si vous aussi vous obtenez cette erreur au lancement de MailDev vous pouvez changer les ports utilisés gràce aux options -s ou -w :

-s, --smtp [port]       SMTP port to catch emails [1025]
-w, --web [port]        Port to run the Web GUI [1080]
maildev -w 8000 # Lancera l'interface web sur le port 8000 plutôt que 1080