SMTP par Tenant¶
Chaque tenant peut configurer son propre serveur SMTP pour l’envoi
d’emails. Si aucune configuration n’est définie, le système utilise
les paramètres SMTP globaux de Django (définis dans .env).
Modèle TenantSMTPConfig¶
Module : src.module.tenant.infrastructure.smtp
- class TenantSMTPConfig(SharedModel)¶
Configuration SMTP par tenant, stockée dans le schéma public.
- tenant: OneToOneField → Tenant¶
Relation 1:1 avec le tenant.
- host: CharField¶
Hostname du serveur SMTP (ex:
smtp.gmail.com).
- port: PositiveIntegerField¶
Port SMTP (587 pour TLS, 465 pour SSL).
- username: CharField¶
Identifiant d’authentification SMTP.
- password: CharField¶
Mot de passe SMTP.
- use_tls: BooleanField¶
Utiliser STARTTLS (port 587).
- use_ssl: BooleanField¶
Utiliser SSL implicite (port 465).
- from_email: EmailField¶
Adresse expéditeur par défaut pour ce tenant.
- timeout: PositiveIntegerField¶
Timeout de connexion (secondes).
- is_active: BooleanField¶
Désactiver pour revenir aux paramètres SMTP globaux.
- Table:
mt_tenant_smtp_config
Backend email tenant-aware¶
- class TenantSMTPEmailBackend(SMTPBackend)¶
Backend email Django qui utilise automatiquement la config SMTP du tenant courant (résolu via
current_tenant_var).Si le tenant n’a pas de
TenantSMTPConfigactive, le backend utilise les paramètres SMTP globaux de Django.# settings.py — pour rendre TOUS les emails tenant-aware : EMAIL_BACKEND = 'src.module.tenant.infrastructure.smtp.TenantSMTPEmailBackend'
Fonctions utilitaires¶
- send_tenant_email(subject, body, to, from_email=None, html_body=None, ...) int¶
Envoie un email via le serveur SMTP du tenant courant.
from src.module.tenant.infrastructure.smtp import send_tenant_email send_tenant_email( subject="Facture prête", body="Votre facture est disponible.", to=["client@example.com"], )
- get_tenant_smtp_config() TenantSMTPConfig | None¶
Retourne la config SMTP du tenant courant, ou
None.
- get_tenant_email_connection(config=None, fail_silently=False)¶
Retourne une connexion SMTP configurée pour le tenant courant.
Configuration via l’admin¶
Le modèle TenantSMTPConfig est enregistré dans l’admin Django avec
un formulaire structuré par sections :
Général — tenant + activation
Serveur SMTP — host, port, TLS/SSL, timeout
Authentification — username, password
Expéditeur — from_email
# Exemple de création via code
from src.module.tenant.infrastructure.smtp import TenantSMTPConfig
TenantSMTPConfig.objects.create(
tenant=my_tenant,
host="smtp.sendgrid.net",
port=587,
username="apikey",
password="SG.xxxxx",
use_tls=True,
from_email="invoices@acme-corp.com",
)
Flux de résolution¶
send_mail() / send_tenant_email()
│
▼
get_current_tenant() ──► tenant_id
│
▼
TenantSMTPConfig.objects.get(tenant=..., is_active=True)
│
├── trouvé ──► connexion SMTP tenant
│
└── non trouvé ──► connexion SMTP globale (settings.py / .env)