Gitlab

Tester les envois de courriels

Les conteneurs ne peuvent pas envoyer directement des mails car les ports 25, 465 et 587 sont bloqués.

Afin de pouvoir utiliser un serveur SMTP pendant le développement d’une application conteneurisée, on peut utiliser Mailhog comme serveur de mails. Il propose aussi un débogueur d’envoi de mails.

MailHog est une image Docker proposant un serveur SMTP et une interface web pour consulter les messages qui ont transité par ce serveur.

On peut l’ajouter au Docker-compose de notre application:

version: "3"

services:
    # we can test mails with mailhog. send a mail from your app and check
    # http://mails.<myapp>
    mails:
        image: mailhog/mailhog:latest
        labels:
            traefik.frontend.rule: Host:mails.<myapp>
            traefik.enable: 'true'
            traefik.port: "8025"
            traefik.tags: web

Il faut aussi ajouter des variables au fichier .env:

MAILS_DOMAIN=app.local
MAILS_PORT=1025
MAILS_USER=user
MAILS_TOKEN=token

Ainsi, dans l’application écrite en Python, on peut définir une méthode qui envoie un email en utilisant le service du conteneur de Mailhog:

import smtplib
import os

def send_mail():
    """Send a mail using env vars as secrets"""
    env = os.environ
    port = int(env['MAILS_PORT'])
    s = smtplib.SMTP('mails', port, timeout=.11)
    s.login(env['MAILS_USER'], env['MAILS_TOKEN'])
    s.sendmail(
        "devnull@%s" % (env['MAILS_DOMAIN']),
        "test@myapp.com",
        "This message is from myapp python")
    s.quit()

Et valider le bon fonctionnement de tout ceci en utilisant le backend de Mailhog sur l’IP de son conteneur (ici, http://172.24.0.5:8025/)

NB: Pour les applications qui utilisent l’image Docker PHP fournie par Bearstech, celle-ci embarque la lib msmtp qui se configure au démarrage, pour pouvoir envoyer des mails avec la très classique commande sendmail.

Top