MailCatcher, un serveur SMTP pour développeur

Lorsqu'on développe sur sa machine, il est courant d'avoir besoin de tester l'envoi d'e-mails. Dans le cas des sites e-commerce, on va s'assurer du bon déroulement des processus d'inscription ou de commande, par exemple.
En général, on installe alors un serveur de mails (postfix, sendmail ou autre). Dans le meilleur des cas, la hantise est alors de faire partir des mails de tests aux mauvais destinataires. Dans le pire des cas, les mails vont être refusés par les autres serveurs SMTP.

Mailcatcher est un serveur SMTP minimaliste qui va intercepter tous les emails et les afficher dans une interface web.

mailcatcher - Catches mail and serves it through a dream

Installation

Développée en ruby, MailCatcher peut être installé grâce au gestionnaire de paquets RubyGems

gem install mailcatcher

Et voilà, votre serveur SMTP light est installé !
Si vous rencontrez des difficultés lors de l'installation sous Linux, vérifiez que les paquets de développements pour Ruby et SQLite 3 notamment sont bien installés.

Mise en route

Une fois installé, il ne reste plus qu'à démarrer MailCatcher.


[22:45:16]-[ograndmougin@ogm-v3550]-[~] 
$ mailcatcher 
Starting MailCatcher
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080
*** MailCatcher runs as a daemon by default. Go to the web interface to quit.

Par défaut, le serveur SMTP écoute sur le port 1025, le serveur web sur le port 1080. Il n'est donc pas nécessaire de lancer mailcatcher en super utilisateur. Par ailleurs, les ports d'écoute peuvent facilement être changés.

mailcatcher - Interface WebInterface Web de MailCatcher

Utilisation avec PHP

Une fois ces deux premières étapes passées, il ne reste plus qu'à indiquer à PHP, dans notre cas, d'utiliser MailCatcher comme serveur SMTP.
Pour cela, il suffit de (re)positionner la variable de configuration PHP sendmail_path.

  • Pour tous les projets, via la modification du php.ini
    sendmail_path = /usr/bin/env catchmail
  • Au cas par cas, en positionnement la valeur de cette variable via Apache (.htaccess ou vhost)
    php_value sendmail_path "/usr/bin/env catchmail"

Vérifions que tout est en place, avec un exemple basique. Pour cela, utilisons la fonction mail native de PHP. Attention, le 4ème paramètre de la fonction mail, qui est optionnel, doit être renseigné pour MailCatcher.


<?php
mail
('email@netapsys.fr''Mail Catcher''Message simple''From: from@netapsys.fr');


 

mailcatcher - Interface Web avec mailMailCatcher - Le mail est affiché immédiatement dans l'inferface web, grâce au WebSockets

Avec les plateformes de e-commerce telles que Magento (1.x) ou RBSChange (3.6) les mails sont bien attrapés sans autre configuration. Pour Prestashop (1.5), dans les paramètres avancés des e-mails en back-office, il faut choisir d'utiliser ses propres paramètres SMTP. Seuls les champs serveur SMTP et ports sont à remplir.

Conclusion

MailCatcher remplit parfaitement son rôle en évitant au développeur de transformer sa machine en serveur de mails. L'installation et la configuration sont très rapides. L'utilisation de MailCatcher est très agréable, notamment grâce aux WebSockets qui permettent un affichage immédiat des emails et un gain de temps appréciable.

Merci à Sören pour le partage de cet outil et Steve pour les astuces.

8 commentaires

  1. Article, intéressant dans son ensemble mais incomplet,

    Vous oublier d’indiquer que pour installer mailcatcher, il faut préalablement installer la DevKit sinon ca ne marchera pas et vous ne donner aucune explication du pouquoi de chemin : ‘/usr/bin/env catchmail’
    Etant débutant avec Ruby pas facile à tout comprendre.

  2. Merci pour ce tuto, mais je n’arrive pas à configurer le chemin ‘/usr/bin/env catchmail’ sous windows. Quelqu’un aurait peut-être une solution?

  3. Superbe appli, bravo.
    Juste une précision au niveau de la conf php, pour moi la ligne suivante n’était pas suffisante
    sendmail_path = /usr/bin/env catchmail
    il faut déclarer le chemin complet de catchmail. Pour le connaitre, exécuter $ which catchmail
    Pour moi cela a donné :
    sendmail_path = /usr/bin/env /usr/local/bin/catchmail

    Et c’est bon ça marche.
    Merci encore pour votre Taff

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *