Aller au contenu
LSSD Mail
Se connecter

Guide d’intégration

Brancher un outil sur LSSD Mail

LSSD Mail est le seul point d’envoi d’e-mails des outils LSSD. Un outil lui remet ses messages en SMTP, sur le réseau Docker interne du serveur. LSSD Mail les envoie depuis contact@lssd.fr par le serveur d’OVH, au nom de l’outil (« LSSD Budget <contact@lssd.fr> »), réessaie en cas de panne et garde un journal pour les administrateurs. L’outil n’a besoin d’aucun identifiant OVH.

En résumé

Serveur SMTPlssd-mail-smtp, port 2525, sur le réseau Docker shared-internal
AuthentificationObligatoire : identifiant et mot de passe propres à l’outil (AUTH PLAIN ou LOGIN)
ChiffrementAucun entre l’outil et LSSD Mail : le trafic ne quitte pas le réseau interne. LSSD Mail parle à OVH en TLS.
ExpéditeurToujours Nom du service <contact@lssd.fr>, quel que soit le From envoyé par l’outil
Limites50 destinataires et 10 Mo par message
JournalDate, service, destinataires, objet et état, conservés 90 jours. Le contenu est supprimé dès l’envoi.

Étape 1 — Créer le service de l’outil

Un administrateur de LSSD Mail ouvre la page Services et ajoute l’outil :

LSSD Mail affiche alors une seule fois la ligne à copier dans le .env de l’outil :

EMAIL_URL=smtp://budget:<mot-de-passe>@lssd-mail-smtp:2525

Mot de passe perdu ou divulgué : « Nouveau mot de passe » sur la même page, puis mettez à jour le .env de l’outil. L’ancien cesse aussitôt de fonctionner. « Désactiver » coupe l’envoi sans supprimer l’historique.

Étape 2 — Brancher l’outil sur le réseau interne

Dans le compose.yaml de l’outil, ajoutez le réseau externe shared-internal aux services qui envoient des e-mails (en général web et worker) :

services:
  web:
    networks: [default, web, internal]
  worker:
    networks: [default, internal]

networks:
  internal:
    external: true
    name: shared-internal

Aucun port n’est publié : lssd-mail-smtp n’est joignable que depuis ce réseau.

Étape 3 — Configurer l’envoi dans l’outil

Dans le .env de l’outil (et dans son .env.example, avec une valeur factice) :

# LSSD Mail: SMTP access of this tool, created on mail.lssd.fr (Services)
EMAIL_URL=smtp://budget:<mot-de-passe>@lssd-mail-smtp:2525
DEFAULT_FROM_EMAIL=contact@lssd.fr

DEFAULT_FROM_EMAIL sert seulement à garder des en-têtes cohérents : LSSD Mail impose de toute façon l’expéditeur du service.

Django

Avec django-environ, déjà utilisé par les outils LSSD :

# settings.py
EMAIL_CONFIG = env.email_url("EMAIL_URL", default="consolemail://")
vars().update(EMAIL_CONFIG)
DEFAULT_FROM_EMAIL = env("DEFAULT_FROM_EMAIL", default="contact@lssd.fr")
EMAIL_TIMEOUT = 15

Rien d’autre à changer : send_mail(), EmailMessage et les e-mails de Django passent par LSSD Mail. Envoyez-les depuis une tâche de fond (django-q2, Celery…) plutôt que pendant la requête.

Next.js et Node.js

Avec Nodemailer, qui accepte directement l’adresse EMAIL_URL (comme toute nouvelle dépendance, à faire valider) :

// lib/mail.ts — server side only (Route Handler, Server Action)
import nodemailer from "nodemailer";

const transport = nodemailer.createTransport(process.env.EMAIL_URL);

export async function sendMail(to: string, subject: string, text: string, html?: string) {
  await transport.sendMail({ from: process.env.DEFAULT_FROM_EMAIL, to, subject, text, html });
}

N’appelez jamais ce code depuis un composant client : le mot de passe ne doit pas quitter le serveur.

Python sans Django

import smtplib
from email.message import EmailMessage

message = EmailMessage()
message["To"] = "lea@example.org"
message["Subject"] = "Votre export est prêt"
message.set_content("Bonjour, votre export est disponible dans LSSD Budget.")

with smtplib.SMTP("lssd-mail-smtp", 2525, timeout=15) as smtp:
    smtp.login("budget", password)  # from the environment, never in the code
    smtp.send_message(message)

En développement

  1. Lancez LSSD Mail sur votre machine : docker compose up -d dans le dossier mail/ (voir son README). En développement, il n’envoie rien à OVH : tous les messages arrivent dans Mailpit, sur http://localhost:8026.
  2. Connectez-vous à http://localhost:8002 avec un compte de test du compte LSSD, et créez le service de votre outil.
  3. Votre outil en développement joint le réseau shared-internal comme en production, avec la même adresse lssd-mail-smtp:2525. Un outil lancé hors de Docker utilise localhost:2525.

Ce que LSSD Mail fait de vos messages

Bonnes pratiques

En cas de problème

Réponse ou symptômeCause et solution
535 à la connexionIdentifiant ou mot de passe faux, ou service désactivé. Vérifiez EMAIL_URL, ou générez un nouveau mot de passe.
Name or service not known, connexion refuséeLe conteneur de l’outil n’est pas sur le réseau shared-internal (étape 2), ou LSSD Mail ne tourne pas.
452 Too many recipientsPlus de 50 destinataires : découpez l’envoi.
552 à l’envoiMessage de plus de 10 Mo : mettez un lien plutôt qu’une pièce jointe.
Message « Nouvelle tentative » ou « Échec » dans le journalLa dernière erreur d’OVH est affichée dans le détail du message.