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 commandesendmail
.