Aller au contenu

Brevo

Brevo (anciennement Sendinblue) est une plateforme marketing tout-en-un française – newsletters, SMS, CRM – qui inclut une API d’e-mail transactionnel. Les données sont hébergées dans l’UE et l’offre gratuite permet quelques centaines d’e-mails par jour.

Choisissez Brevo si vous l’utilisez déjà pour vos newsletters ou votre CRM et voulez tout centraliser, ou si vous cherchez un fournisseur hébergé dans l’UE avec un quota gratuit quotidien généreux. Si vous n’avez besoin que d’e-mail transactionnel avec une délivrabilité maximale, comparez avec Postmark ou Mailgun dans la présentation des services d’envoi.

  • Un compte Brevo avec l’e-mail transactionnel activé. Les nouveaux comptes sont parfois mis en attente de validation avant de pouvoir envoyer des e-mails transactionnels.
  • Un expéditeur vérifié : ajoutez et authentifiez votre domaine dans Expéditeurs, domaines et IP dédiées → Domaines, puis ajoutez l’adresse d’expéditeur sous Expéditeurs.
  • Une clé API v3 depuis SMTP & API → Clés API → Générer une nouvelle clé API (elle commence par xkeysib-). Les clés API Brevo ne sont pas limitées par autorisation – créez une clé dédiée nommée p. ex. « Frontmail » pour pouvoir la révoquer indépendamment. N’utilisez pas la clé SMTP (xsmtpsib-…) ; Frontmail utilise l’API HTTP.
  • Si les adresses IP autorisées (paramètres de sécurité) sont activées pour votre compte, désactivez-les ou ajoutez les adresses IP sortantes de Frontmail – sinon chaque appel est refusé avec 403 unrecognised IP address.
  1. Ouvrez Services d’envoi → Ajouter un service → Brevo.
  2. Remplissez les champs :
Champ Où le trouver Exemple
Clé API (v3) SMTP & API → Clés API (affichée une seule fois) xkeysib-1a2b3c…-XyZ
Jeton du webhook Facultatif – le token que vous choisissez pour le webhook Brevo (voir plus bas) 9f8e7d6c5b4a…
E-mails par seconde (max.) Facultatif ; 10/s par défaut 10
  1. Cliquez sur Vérifier et enregistrer – Frontmail lit les informations de votre compte Brevo avec la clé.
  2. Le service est enregistré une fois la vérification réussie. Les identifiants sont chiffrés avec le chiffrement d’enveloppe d’AWS KMS.

Brevo liste les enregistrements sous Expéditeurs, domaines et IP dédiées → Domaines → Authentifier. Valeurs typiques :

; Code de propriété du domaine
example.com. TXT "brevo-code:1a2b3c4d5e6f7a8b9c0d"
; DKIM – les domaines récents reçoivent deux CNAME, les plus anciens un seul TXT sur mail._domainkey
brevo1._domainkey.example.com. CNAME b1.example-com.dkim.brevo.com.
brevo2._domainkey.example.com. CNAME b2.example-com.dkim.brevo.com.
; SPF – à fusionner avec votre enregistrement existant
example.com. TXT "v=spf1 include:spf.brevo.com ~all"
; DMARC
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.com"
  • Copiez les noms et valeurs exacts depuis Brevo – le format DKIM a changé au fil du temps (TXT mail._domainkey ou CNAME brevo1/brevo2) et les comptes plus anciens peuvent encore afficher include:spf.sendinblue.com.
  • Brevo considère un enregistrement DMARC comme obligatoire pour l’authentification du domaine ; p=none suffit pour commencer. Durcissez en p=quarantine / p=reject après avoir examiné les rapports.

Brevo a un point de terminaison d’API unique (api.brevo.com/v3) et héberge les données dans l’UE. Il n’y a rien à sélectionner dans Frontmail.

  • Offre gratuite : 300 e-mails par jour (transactionnel et marketing confondus).
  • Les offres payantes reposent sur un volume mensuel d’e-mails ; quand les crédits sont épuisés, Brevo répond 402 not_enough_credits, que Frontmail traite comme une erreur auth (le service est inutilisable jusqu’à ce que vous rechargiez).
  • Validation du compte : tant que Brevo n’a pas validé votre compte, l’API peut refuser les envois avec account_under_validation.
  • Brevo accepte un en-tête X-Sib-Sandbox: drop pour les essais à blanc ; Frontmail ne l’utilise pas.
  1. Copiez l’URL du webhook depuis la page du service dans Frontmail (bouton de copie) :

    https://api.frontmail.dev/webhooks/providers/brevo/<token>
  2. Dans Brevo, ouvrez Transactionnel → Paramètres → Webhook → Ajouter un nouveau webhook (interface récente : Paramètres → Webhooks → Transactionnel).

  3. Collez l’URL et, dans l’authentification, choisissez Token. Générez un token long et aléatoire, collez-le dans Brevo et dans le champ Frontmail Jeton du webhook. Brevo envoie alors Authorization: Bearer <token> à chaque appel. (La Basic auth fonctionne aussi – utilisez le token comme mot de passe.)

  4. Sélectionnez les événements :

Événement Brevo Événement Frontmail
Delivered delivered
Hard bounce, Invalid email bounced (définitif) – ajoutée à la liste de suppression
Soft bounce, Blocked enregistré comme rebond temporaire
Deferred enregistré sur le message
Complaint (spam) complained – ajoutée à la liste de suppression
Opened opened
Clicked clicked

Vérification de la signature : Brevo ne signe pas le contenu des webhooks. Le token secret dans l’URL identifie le service et, si vous définissez un Jeton du webhook, Frontmail refuse les appels dont le bearer token (ou le mot de passe Basic auth) ne correspond pas.

Frontmail marque chaque message avec fm:<message id> pour que les événements puissent être associés.

  • auth – le service est cassé (clé invalide, adresse IP non autorisée, plus de crédits, compte en cours de validation). Le service est marqué unhealthy ; le propriétaire reçoit un e-mail et une bannière dans le tableau de bord. Un service de secours défini sur le modèle prend le relais ; sinon le crédit est remboursé et le message attend dans la file d’attente des e-mails retenus en held_service_error, puis part automatiquement une fois le service réparé (revérifié à l’enregistrement et lors de la vérification d’état quotidienne).
  • permanent – ce message ne peut pas être envoyé (destinataire invalide, expéditeur invalide ou non vérifié, erreur de validation 400). Service de secours s’il est configuré, sinon failed et remboursé.
  • transient – 5xx, 429, délais dépassés. Relancé avec un délai exponentiel ; après la dernière tentative, failed et remboursé.
Réponse de Brevo Catégorie Que faire
401 unauthorized – Key not found auth Générez une nouvelle clé API v3 (pas la clé SMTP) et mettez à jour le service.
403 permission_denied – unrecognised IP address auth Désactivez les adresses IP autorisées ou ajoutez les adresses IP de Frontmail.
402 not_enough_credits auth Passez à une offre supérieure ou attendez la réinitialisation du quota quotidien ou mensuel.
400 account_under_validation auth Terminez la validation du compte Brevo (consultez votre boîte de réception Brevo).
400 invalid_parameter – sender is invalid / not verified permanent Ajoutez et vérifiez l’adresse d’expéditeur sous Expéditeurs.
400 invalid_parameter – email is not valid permanent Voir destinataire invalide.
429 Too Many Requests transient Limite de débit ; relancé avec un délai croissant.
500 / 502 / 503, délai dépassé transient Panne chez Brevo – Frontmail relance.
  • E-mail transactionnel activé, compte validé
  • Domaine authentifié : brevo-code, DKIM, SPF, DMARC
  • Adresse d’expéditeur ajoutée sous Expéditeurs
  • Clé API v3 dédiée (xkeysib-…), adresses IP autorisées désactivées ou Frontmail autorisé
  • Tester la connexion réussit
  • Webhook transactionnel avec authentification par token, même token dans Frontmail
  • Événements : delivered, hard/soft bounce, invalid, blocked, complaint (+ opened/clicked)