Tester les mails dans un environnement de développement Docker avec MailHog

Pour tester les mails en local j'ai l'habitude d'utiliser MailHog. Si vous ne connaissez pas cet outil et que tester les mails d'un projet en local vous intéresse, allez faire un tour sur la page du projet : github.com/mailhog/MailHog

N'ayant pas trouvé d'explications claires pour intégrer MailHog dans un un projet qui utilise Docker, voici comment je m'y prends.

Container MailHog

D'abord nous ajoutons à notre docker-compose.yml un container mailhog .

version: '3'
services:
  app:
    build: site
    ports :
      - 80:80
  
  mailhog:
    image: mailhog/mailhog
    ports:
      - 8025:8025

L'interface de mailhog sera disponible à l’adresse 127.0.0.1:8025.

Ici j'ai mis un container app pour l'exemple, vous devriez déjà avoir un ou plusieurs containers pour votre projet.

mhsendmail dans le container de l'application

Ensuite nous ajoutons mhsendmail dans le container app qui va nous permettre d'envoyer des mails au container mailhog.

Dans le Dockerfile de app il faut installer go et git puis mhsendmail. Dans l'exemple qui suit j'utilise une image basée sur Debian, pensez à adapter au besoin.

# mhsendmail dependencies
RUN apt-get update -y && apt-get install -y --no-install-recommends \
    golang-go \
    git

# mhsendmail
RUN GOPATH=$HOME/go \
    PATH=$PATH:$GOROOT/bin:$GOPATH/bin \
    go get github.com/mailhog/mhsendmail
RUN ln  ~/go/bin/mhsendmail /usr/bin/mhsendmail

Il faut ensuite configurer son application pour quelle utilise /usr/bin/mhsendmail --smtp-addr mailhog:1025 pour envoyer des mails.

Avec PHP

Si vous utilisez PHP il suffit de l'indiquer dans sendmail_path dans le php.ini.

sendmail_path = /usr/bin/mhsendmail --smtp-addr mailhog:1025

Si vous avez un COPY dans votre Dockerfile ou un volume dans votre docker-compose.yml pour gérer le php.ini, modifiez directement le fichier que vous synchronisez.

Sinon ajoutez la ligne suivante dans votre Dockerfile

RUN sed -i -e 's/.*sendmail_path =.*/sendmail_path = \/usr\/bin\/mhsendmail --smtp-addr mailhog:1025/g' /usr/local/etc/php/php.ini

Illustration (libre d'usage) par Samuel Zeller