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.
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.
Interface 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 - 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.
J’ai développé quelque chose d’équivalent en java dans un projet maven, facile à lancer pour ceux qui ne sont pas fan de Ruby.
https://github.com/w3blogfr/mockima…
PS : j’ai encore quelques points à améliorer
Super article qui peut nous aider sur beaucoup de projets
Asura – Prince IX name: Asura Chios, the old king Shura most loved son,
wedding cars perth
MailCatcher, un serveur SMTP pour développeur – Netapsys Blog…
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.
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?
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
je arrive pas a configuré sur kali linux