Par [Votre Nom] – 2 novembre 2025
1. Introduction
Dolibarr est un ERP/PGI Open‑Source qui, depuis sa création en 2002, a su se imposer comme une solution légère, modulable et très adaptée aux PME, aux start‑ups et aux projets auto‑hébergés. L’un des leviers majeurs de sa valeur ajoutée en production réside dans la capacité à déclencher automatiquement des actions par email lorsqu’un événement métier intervient (validation de devis, mise à jour d’une commande, facture expirée, etc.).
Dans cet article, nous passerons en revue :
- Les mécanismes natifs de génération d’emails dans Dolibarr.
- Les bonnes pratiques à adopter pour garantir la fiabilité, la performance et la conformité (RGPD, anti‑spam, etc.).
- Les intégrations modernes (API, services tiers, micro‑services) qui permettent de dépasser les limites de l’envoyeur d’emails intégré et d’en faire le cœur d’une architecture orientée événements.
2. Le moteur d’emails natif de Dolibarr
2.1 Fonctionnalités de base | Fonction | Description | Où la configurer |
|—|—|—|
| Modèle d’email (template) | Variables Dolibarr ({nom}, {date}, {statut}…) sont remplaçables dans le texte et le sujet. | Parameter → Email Templates |
| Destinataires multiples | To, CC, BCC, listes de contacts relationnels ou groupes. | Dans le formulaire de l’objet (ex. devis, commande). |
| Synchronisation avec le CRM | Les contacts créés dans Dolibarr sont automatiquement disponibles pour les envois. | Fiche contact → « Emails » |
| Suivi des envois | Historique des mails, statut (envoyé, lu si les images sont intégrées, exploité sur le serveur). | CRM → Mailings |
| Cron / Scheduler | Déclenchement périodique (ex. relances, factures à payer). | Administration → Cron |
2.2 Limites à connaître
| Limite | Impact | Solutions de contournement |
|---|---|---|
| Pas de moteur SMTP avancé (pas de queue robuste) | Risque de perte de mails en cas de surcharge. | Utiliser un daemon externe (ex. cron → script Python ou Bash qui lit la table mailing et envoie via une librairie robuste). |
| Pas de suivi d’ouvertures intégré à 100 % | Les images intégrées ne suffisent pas pour un suivi fiable. | Enrichir les envois avec un service tiers (Mailgun, SendGrid) qui renvoie des webhooks. |
| Pas de templating avancé (ex. conditionnels) | Les scénarios complexes nécessitent du code manuel. | Créer des templates personnalisés avec des variables PHP ou passer par un moteur de templating externe (Twig). |
3. Bonnes pratiques d’envoi d’emails en production
3.1 Sécurité et conformité (RGPD)
- Consentement explicite – Ajoutez une case à cocher « J’accepte de recevoir des notifications par email » lors de la création du contact.
- Gestion des désabonnements – Stockez le flag
email_optout. Dans le modèle d’email, insérez toujours le lien « Se désabonner » qui met à jour ce flag. 3. Chiffrement du transport – Configurez le serveur SMTP avec TLS (tls://smtp.example.com:587).
3.2 Fiabilité du service d’envoi
| Action | Pourquoi | Exemple de mise en œuvre |
|---|---|---|
| Séparer les files de production et de test | Éviter de polluer le serveur de prod avec les envois de validation. | Créez deux configurations : mail.production.php et mail.test.php. |
| Utiliser une file d’attente (Queue) | Mettre le processus d’envoi hors du cycle transactionnel. | Script PHP CLI exécuté par cron : php send_queue.php qui lit mailing_queue et envoie les messages. |
| Retry & Back‑off | Réessayer en cas de serveur SMTP temporairement indisponible. | Implémentez un compteur de tentatives et délai exponentiel (ex. 30 s → 2 min → 4 min). |
| Limitation du débit | Respecter les plafonds de certains services (ex. 100 mails/h). | Utilisez un token‑bucket ou un sleep() de 5 s entre deux envois. |
3.3 Performance & coût
| Métrique | Astuce | Impact |
|---|---|---|
| Taille du mail | Supprimez les pièces jointes volumineuses ou externalisez vers un service cloud (NAS, S3). | Réduction du trafic réseau & du temps d’attente. |
| Compression | Utilisez gzcompress() pour les corps longs. |
Moins de bande passante. |
| Campagnes groupées | Regroupez les emails contenant le même contenu en un seul message avec CC ou BCC quand c’est pertinent. | Moins d’appels SMTP, meilleure latence. |
3.4 Tests automatisés
- Unitaires : Mock de
PHPMailerou de la classeMailde Dolibarr. - Intégration : Table
mailing_queueremplie, script de queue déclenché en mode « dry‑run ». - CI/CD : Inclure les tests d’envoi dans votre pipeline GitLab/Azure DevOps, avec un SMTP‑mock (MailHog, MailHog UI).
4. Intégrations modernes autour de Dolibarr
Dolibarr expose plusieurs points d’extension : modules PHP, API REST, hooks (hooks), et un moteur de events (via le module Event Manager). Voici comment les exploiter pour moderniser l’emailing.
4.1 Architecture orientée événements
Event (ex. "order.confirmed") --> Trigger (Hook in module order) --> Dispatcher --> Email Service (SMTP/SendGrid)
- Hooks natifs :
\dol_module::emit()dans les fichiers//hooks//order/confirm.php. - Custom events : Créez votre module
myemailet enregistrez des événements viadol_event_init(). - External consumer : Micro‑service Node.js ou Python qui écoute via la base (
dol_event_listener) ou via l’API REST de Dolibarr.
Exemple : notification de commande confirmée
// file: htdocs/supplier/orders/confirm.php (hook)
$hook = array('name' => 'HOOK_ORDER_CONFIRM', 'type' => 'both', 'args' => array());
$this->registerHook($hook);
// emitter
dol_event_dispatch('HOOK_ORDER_CONFIRM', 'ORDER_CONFIRMED', $order_id);
Dans le module dédié :
function hook_order_confirmed($order_id) {
$order = new Order($db);
$order->get($order_id);
$template = 'email_order_confirmation';
$mail = new \PHPMailer\PHPMailer\PHPMailer();
// configuration SMTP $mail->isSMTP();
$mail->Host = $conf->global->mail->smtp_host;
// ... do send
}
4.2 API REST pour piloter l’envoi d’emails depuis l’extérieur
Dolibarr 22+ propose une API RESTful (/dol_api/function.Module) :
| Endpoint | Verb | Description |
|---|---|---|
/api/v1/sendmail |
POST | Crée une entrée dans mailing_queue sans blocage. |
/api/v1/contacts |
GET | Retourne la liste des contacts avec filtres (opt‑in, tags). |
Utilisation :
curl -X POST https://erp.mondomaine.com/api/v1/sendmail \
-H "Authorization: Bearer <TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"template_id": 12,
"to": "client@example.com",
"variables": {"{NAME_LAST}": "Dupont", "{NUM_ORDER}": "ORD-2025-0987"}
}'
Avantages :
- Scalabilité – Vous pouvez externaliser complètement l’envoi (micro‑service dédié).
- Observabilité – Toutes les requêtes passent par un point d’entrée unique, facile à tracer avec Grafana/ELK.
4.3 Intégrations tierces populaires
| Service | Pourquoi l’utiliser ? | Mode d’intégration |
|---|---|---|
| SendGrid / Mailgun / Amazon SES | Gestion de la délivrabilité, analytics (open / click), templates dynamiques. | Webhook de réponses, appel API via le script de queue ou directement depuis le module Dolibarr (mailings_msglog stocke la réponse). |
| Microsoft Power Automate / Zapier | Effet “no‑code” pour relier le CRM à Outlook, Teams ou des notifications Slack. | Webhook de Dolibarr → Webhooks by Zapier → Action SendGrid. |
| Twilio SendGrid Dynamic Templates | Templates conditionnels très puissants (loops, IF). | Rendu côté serveur via Smarty ou bien via le moteur de template de SendGrid (envoyer le HTML déjà préparé). |
| Elastic Email | Envoi massif (batch) avec segmentation intégrée. | Export de la table mailing_list pour créer des campagnes. |
Cas d’usage : relance automatisée d’une facture impayée
- Déclencheur : Une facture est mise en statut En attente de paiement > 7 jours.
- Hook :
\dol_module::emit('INVOICE_OVERDUE', $facture_id). - Consumer : Service Python qui interroge l’API
facturede Dolibarr, récupère les variables, et envoie via SendGrid un email avec lien de paiement pré‑rempli. - Analytics : Le webhook de SendGrid signale l’ouverture, ce qui met à jour un champ
relance_status→ opened → déclenche l’étape suivante (mail 2, appel téléphonique).
4.4 Orchestration with Workers (Docker/Kubernetes)
| Étape | Conteneur | Technologie |
|---|---|---|
| Cron | dolibarr-cron |
cron → script cron.sh qui lance le queue worker (php send_queue.php). |
| Queue worker | mailer-worker |
php artisan queue:work ou python worker.py. |
| API Gateway | dolibarr-api |
Nginx + PHP-FPM → /api/v1/sendmail. |
| Observabilité | fluentd → Loki/Graphite |
Métriques de latence, erreurs SMTP, taux de délivrabilité. |
Avantages :
- Scalabilité horizontale : ajouter des pods workers en fonction du nombre de mails en attente.
- Isolation : le processus d’envoi n’affecte pas le cœur ERP.
- Gestion des secrets : utilisation de
secretsmanager.amazonaws.comouvault.k8s.iopour les credentials SMTP/API.
5. Checklist rapide pour une implantation « production‑ready »
| ✔️ | Action |
|---|---|
| 1 | Créer un template d’email dédié à chaque type d’événement (commande, facture, rappel). Utiliser des variables claires ({NUM_ORDER}, {DUE_DATE}). |
| 2 | Activer TLS sur votre serveur SMTP. Testez le certificat avec openssl s_client. |
| 3 | Mettre en place une file d’attente (table mailing_queue+) et un script CLI qui la consomme. |
| 4 | Implémenter gestion du taux de retry et du back‑off. |
| 5 | Ajouter méchanisme de désabonnement et stocker les préférences dans la table user (email_optout). |
| 6 | Configurer un système de monitoring : nombre d’emails en file, taux de rejet (SMTP error), temps moyen de traitement. |
| 7 | Documenter les templates et placer les variables dans un fichier lang/xx_utf8.php pour faciliter la traduction. |
| 8 | Ajouter des tests unitaires avec MockMail ou PHPMailerMock pour couvrir les chemins d’erreur. |
| 9 | Externaliser les pièces jointes volumineuses vers un bucket S3 + générer un lien sécurisé. |
| 10 | Créer un processus de revue de sécurité (audit annuel des modèles d’email). |
6. Conclusion
Dolibarr constitue déjà une plateforme solide pour la gestion d’une petite à moyenne entreprise. En combinant le système d’email natif avec des bonnes pratiques (sécurité, file d’attente, monitoring) et en s’appuyant sur des intégrations modernes (API REST, micro‑services, services d’envoi spécialisés), on obtient une chaîne d’automatisation d’emails qui :
- Est fiable : les mails ne sont pas perdus même sous forte charge.
- Est audit‑friendly : chaque envoi est tracé, chaque consentement est respecté.
- S’adapte aux évolutions : on peut ajouter des étapes de relance, des rappels SMS, ou des notifications Slack sans toucher au cœur de l’ERP.
En d’autres termes, Dolibarr peut devenir le centre névralgique d’une véritable architecture événementielle orientée production, où chaque transaction déclenche automatiquement des communications personnalisées, intégrées à vos outils de suivi et analytique modernes.
« Le futur de l’ERP, c’est la capacité à parler aux autres systèmes en temps réel – même avec des emails »
N’hésitez pas à exploiter les hooks et à déployer un worker dédié dès les premières phases de votre projet ; cela vous évitera bien des douleurs lors de la mise en production.
Bon déploiement et bon mailing !
Ressources complémentaires – Dolibarr Documentation officielle – Email templates : https://dolibarr.org/en/doc/email_templates
- PHPMailer – bibliothèque d’envoi moderne, compatible TLS : https://github.com/PHPMailer/PHPMailer
- SendGrid API v3 – guide d’intégration : https://sendgrid.com/docs/for-developers/sending-email/
- Docker‑Compose Sample – déploiement complet avec worker : https://github.com/dolibarr/docker-samples/tree/master/mailer
Si vous avez besoin d’un exemple de code complet ou d’une aide pour configurer votre premier service d’emailing, laissez un commentaire ou contactez‑moi directement.