Documentation10 min de lecture

Savoir si vos e-mails Odoo arrivent : suivi, rejets et délivrabilité

Le module OCA `mail_tracking` (dépôt `mail`, version 18.0.1.0.11, licence AGPL-3) crée deux modèles de suivi — **courriel suivi** et **événement de suivi** — qui enregistrent le **type et la description du rejet**, l'erreur SMTP, puis portent sur chaque contact un **score de courriel** et un indicateur de **rejet**. Treize autres modules traitent la liste de blocage, les en-têtes, la mise en page et le retrait de la marque Odoo.

Boîte de réception affichée sur un écran d'ordinateur

Odoo envoie des devis, des factures, des relances et des accusés de réception. En standard, il ne vous dit pas s'ils sont arrivés : un message parti est un message réussi, et un rejet disparaît dans les journaux du serveur.

Quatorze modules communautaires transforment cette boîte noire en information exploitable.

Résumé

Trois modules traitent le suivi : un modèle de courriel suivi avec son type de rejet, sa description et l'erreur SMTP ; un modèle d'événement portant le type d'événement, l'adresse IP, le système d'exploitation et la nature mobile du client ; l'intégration des notifications Mailgun ; et le suivi appliqué aux campagnes d'e-mail marketing.

Sur chaque contact, le suivi dépose un score de courriel, un indicateur de rejet et le nombre de messages suivis — plus une liste des messages en échec, posée sur tous les modèles qui ont une conversation : factures, pistes, employés, véhicules, articles de blog.

Trois modules traitent ce qu'on refuse d'envoyer : des règles de blocage par motif, l'ajout d'une adresse à la liste noire depuis la fiche contact, et le nettoyage des notifications en erreur. Huit modules traitent enfin la forme et l'acheminement : adresse d'expédition fixe par serveur, en-têtes supplémentaires, serveur sortant par modèle, en-tête « message automatique », mise en page forcée, aperçu avant envoi, conversion du CSS en style en ligne, et retrait de la marque Odoo.

L'essentiel

  • Un journal des envois avec le type et la description du rejet.
  • Un score de courriel et un indicateur de rejet sur chaque contact.
  • Les messages en échec visibles sur la fiche concernée, pas dans un journal serveur.
  • Des règles de blocage par motif d'adresse destinataire.
  • Une adresse d'expédition fixe par serveur sortant, avec liste blanche de domaines.
  • Un serveur sortant par modèle : les factures et les relances par des canaux distincts.
  • L'en-tête « message automatique », qui évite les réponses automatiques en boucle.
  • Le retrait de la marque Odoo des messages envoyés.

Ce que ces modules ajoutent à l'instance

ModuleVersionCe qu'il apporte
mail_tracking18.0.1.0.11Modèles mail.tracking.email et mail.tracking.event, score et rejet par contact
mail_tracking_mailgun18.0.1.0.0Réception des notifications Mailgun, avec clés et domaines en configuration
mail_tracking_mass_mailing18.0.1.0.0Le suivi appliqué aux campagnes d'e-mail marketing
mail_recipient_blocklist18.0.1.0.0Modèle mail.recipient.block.rule : motif, type de motif, séquence
mail_partner_opt_out18.0.1.0.0Mise en liste noire de l'adresse depuis la fiche contact (LGPL-3)
mail_notification_clean_status_error18.0.1.0.0Purge des notifications en erreur par l'action planifiée
mail_outbound_static18.0.1.0.1smtp_from et domain_whitelist sur le serveur sortant (LGPL-3)
mail_extra_header18.0.1.0.0extra_headers sur le serveur sortant
outgoing_email_by_model18.0.1.0.0Adresse et serveur sortant définis par modèle
mail_autogenerated_header18.0.1.1.0L'en-tête indiquant un message généré automatiquement
mail_layout_force18.0.1.0.0Mise en page imposée par modèle de courriel ou par modèle de données
mail_layout_preview18.0.1.0.0Aperçu d'un modèle de courriel dans le navigateur
mail_inline_css18.0.1.0.0Conversion des balises de style en style en ligne
mail_debrand18.0.1.0.1Retrait des liens et mentions Odoo des messages

Les menus : Paramètres ▸ Technique ▸ E-mail ▸ Courriels suivis et Événements du suivi, Paramètres ▸ Technique ▸ Discussion ▸ Recipient Block Rules, E-mail Marketing ▸ Suivi de l'envoi et ses deux sous-menus.

Le suivi : ce qu'Odoo ne dit pas

En standard, un e-mail Odoo a trois états : à envoyer, envoyé, en échec. « Envoyé » veut dire « remis au serveur SMTP », pas « arrivé ». Un rejet définitif pour adresse inexistante produit le même « envoyé » qu'une livraison réussie.

mail_tracking crée un modèle courriel suivi portant, pour chaque envoi, le type de rejet et sa description, le type d'erreur et sa description, et l'erreur du serveur SMTP. Un second modèle enregistre les événements : type d'événement, date, adresse IP, famille de système d'exploitation, nature mobile du client.

Sur le contact, trois champs en découlent : un score de courriel, un indicateur courriel rejeté, et le nombre de courriels suivis.

Le champ le plus utile est ailleurs : une liste messages en échec apposée sur tous les modèles qui ont une conversation — facture, piste, commande, employé, véhicule, compte comptable. L'échec devient visible là où le travail se fait, pas dans un écran technique que personne n'ouvre.

Deux réglages de société complètent : l'âge maximum des enregistrements de suivi en jours — faute de quoi la table grossit sans fin — et l'affichage des alias dans le suivi.

Mailgun et les campagnes

mail_tracking_mailgun reçoit les notifications Mailgun et les transforme en événements de suivi : ouverture, clic, rejet, plainte. La configuration demande une clé d'API, une clé de validation, une clé de signature de rappel et les domaines concernés.

mail_tracking_mass_mailing étend le suivi aux campagnes d'e-mail marketing, avec ses propres menus de consultation.

Ce qu'on refuse d'envoyer

mail_recipient_blocklist crée un modèle de règle de blocage : un motif, un type de motif, une séquence, des notes. Les messages dont le destinataire correspond ne partent pas.

La première utilité d'une liste de blocage n'est pas commerciale, elle est opérationnelle : une base de recette restaurée depuis la production envoie de vraies relances à de vrais clients. Une règle bloquant tout sauf un domaine interne évite l'incident.

mail_partner_opt_out permet d'ajouter l'adresse d'un contact à la liste noire directement depuis sa fiche — le geste que demande un client qui ne veut plus rien recevoir.

mail_notification_clean_status_error étend l'action planifiée de nettoyage pour supprimer aussi les notifications en erreur, qui s'accumulent autrement indéfiniment.

L'acheminement et la forme

Qui envoie, et comment

  • mail_outbound_static fixe l'adresse d'expédition du serveur sortant et une liste blanche de domaines. C'est la réponse technique à SPF et DMARC : envoyer au nom du client — [email protected] — depuis votre serveur fait échouer l'authentification et classe le message en indésirable.
  • mail_extra_header ajoute des en-têtes libres par serveur sortant : identification de flux, étiquette de routage, en-tête exigé par un prestataire d'envoi.
  • outgoing_email_by_model définit une adresse et un serveur sortant par modèle de données. Les factures partent par compta@, les relances par recouvrement@, les campagnes par un service d'envoi en masse — et une campagne mal réglée ne grille pas la réputation du domaine comptable.
  • mail_autogenerated_header ajoute l'en-tête standard signalant un message généré automatiquement. Sans lui, un répondeur d'absence répond, Odoo renvoie, et la boucle se nourrit.

À quoi ressemble le message

  • mail_layout_force impose une mise en page : par modèle de courriel, ou par correspondance entre une mise en page et une liste de modèles de données.
  • mail_layout_preview ouvre l'aperçu d'un modèle de courriel dans le navigateur — ce qui évite la méthode habituelle, qui consiste à s'envoyer un devis de test à soi-même.
  • mail_inline_css convertit les balises de style en style en ligne, seule forme que les clients de messagerie respectent de manière fiable.
  • mail_debrand retire des messages envoyés les liens et mentions Odoo, y compris le « propulsé par ».

Le retrait de la marque est souvent présenté comme une coquetterie. C'est une question de crédibilité : une facture qui porte le nom de l'éditeur de l'ERP de son expéditeur indique au destinataire une information qui ne le concerne pas, et qui ressemble à un publipostage.

Limites connues

  • Le suivi fait grossir la base : deux tables par envoi. Régler l'âge maximum des enregistrements dès l'installation.
  • Les clés d'API Mailgun sont stockées en configuration, donc dans la base — une copie de production restaurée pour recette les emporte.
  • Le score de courriel est un indicateur, pas une vérité : il baisse sur un rejet temporaire comme sur une adresse morte.
  • mail_debrand modifie les gabarits par substitution de texte : son résumé indique qu'il retire les occurrences d'« odoo » dans les textes de plus de vingt caractères, ce qui peut toucher un contenu légitime.
  • outgoing_email_by_model ne dispense pas de configurer SPF et DKIM pour chaque domaine d'expédition utilisé.
  • outgoing_email_by_model a un README minimal : ses deux champs sont relevés sur instance.
  • Le suivi d'ouverture repose sur une image appelée à l'affichage : les clients qui bloquent les images ne produisent aucun événement, et une non-ouverture n'est donc pas une preuve de non-lecture.

Identité technique

Les quatorze modules viennent du dépôt OCA mail, branche 18.0 — 46 modules au total. Ils sont en licence AGPL-3, sauf mail_partner_opt_out et mail_outbound_static, en LGPL-3. Les dépendances : mail pour la plupart, base pour les deux modules de serveur sortant, mass_mailing pour le suivi des campagnes.

Questions fréquentes

Odoo dit « envoyé » : le message est-il vraiment arrivé ?

Non. En standard, « envoyé » signifie remis au serveur SMTP, pas livré. Un rejet définitif pour adresse inexistante produit le même état qu'une livraison réussie. mail_tracking enregistre le type de rejet, sa description et l'erreur SMTP, et pose la liste des messages en échec sur la fiche concernée.

Comment éviter qu'une base de recette envoie de vrais e-mails aux clients ?

mail_recipient_blocklist crée des règles de blocage par motif de destinataire : une règle ne laissant passer qu'un domaine interne suffit. C'est la première utilité du module — une copie de production restaurée pour recette envoie autrement de vraies relances.

Peut-on envoyer les factures et les campagnes depuis des serveurs différents ?

Oui : outgoing_email_by_model définit une adresse et un serveur sortant par modèle de données. Les factures par compta@, les relances par recouvrement@, les campagnes par un service d'envoi en masse — ainsi une campagne mal réglée ne grille pas la réputation du domaine comptable.

Pourquoi mes e-mails Odoo partent-ils en indésirable ?

Souvent parce qu'Odoo envoie au nom du contact — [email protected] — depuis votre serveur, ce qui fait échouer SPF et DMARC. mail_outbound_static fixe l'adresse d'expédition du serveur sortant et une liste blanche de domaines. Cela ne dispense pas de configurer SPF et DKIM.

Peut-on retirer la mention Odoo des e-mails envoyés ?

Oui, avec mail_debrand, qui retire les liens et le « propulsé par » des gabarits. Attention : son résumé indique qu'il supprime aussi les occurrences d'« odoo » dans les textes de plus de vingt caractères, ce qui peut toucher un contenu légitime — à vérifier sur vos modèles.

Se faire accompagner

La délivrabilité est le défaut le plus coûteux et le moins diagnostiqué d'un ERP : des devis qui n'arrivent pas, des relances jamais lues, et une équipe qui conclut que « l'ERP n'envoie pas les mails ». Dans la plupart des cas, l'ERP envoie — et se fait refuser.

Nous installons donc le suivi avant toute campagne, nous séparons les canaux d'envoi par usage, et nous vérifions SPF, DKIM et DMARC sur chaque domaine utilisé. Savoir qu'un e-mail a été rejeté vaut mieux que croire qu'il a été lu. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

Pourquoi « envoyé » ne veut pas dire « arrivé », et les quatorze modules qui rendent la différence visible : journal des rejets, score par contact, messages en échec sur la fiche concernée, canaux d'envoi séparés par usage. Parlons de votre délivrabilité.

Documentation OCAOdoo CommunityMessagerie

Partager

Fiches connexes

Équipe au travail sur des ordinateurs portables autour d'une table
Le module OCA `account_invoice_en16931` (dépôt `fr-einvoicing`, version 18.0.1.0.0, licence AGPL-3) est le socle qui fabrique le fichier de facture électronique conforme à la norme européenne **EN 16931** : Factur-X (PDF/A-3 avec XML CII embarqué), XML UBL, XML CII ou PDF accompagné d'un UBL — et il ajoute des **contrôles bloquants à la validation** d'une facture client. Les quatre modules qui s'y greffent pour la France, et ce que le socle ne fait pas.
Lire la suite
Documentation OCA, Facturation électronique
Réunion d'approbation autour d'un document de travail
Relevé sur une instance Odoo 18 Community, le module OCA `base_tier_validation` (dépôt `server-ux`, version 18.0.3.5.1, licence AGPL-3) ajoute 1 modèle, 101 champs et 3 menus, mais ne s'active sur aucun document métier par lui-même : il lui faut un module d'implémentation. C'est le point qui surprend le plus — voici ce qu'il fait réellement, et comment le mettre en service.
Lire la suite
Documentation OCA, Odoo