Aller au contenu principal

Postmark (ActiveCampaign) : Guide technique complet pour l'email transactionnel

Par CaptainDNS
Publié le 28 janvier 2026

Dashboard Postmark avec Message Streams et configuration DNS DKIM
TL;DR
  • 📢 Postmark, spécialisé transactionnel, acquis par ActiveCampaign en 2022, mise sur la délivrabilité exceptionnelle avec séparation stricte transactionnel/broadcast via Message Streams.
  • API REST simple à api.postmarkapp.com avec header X-Postmark-Server-Token, 50 destinataires max par email, 500 messages par batch.
  • DKIM 1024 bits avec sélecteur timestampé ([timestamp]pm._domainkey), rotation manuelle trimestrielle recommandée.
  • Return-Path custom via CNAME pm-bounces.captaindns.compm.mtasv.net pour alignement SPF DMARC relaxed uniquement (pas de strict).
  • IP dédiée à 50$/mois à partir de 300K emails/mois, warm-up automatique sur 3-6 semaines.
  • Plans à partir de 15$/mois pour 10K emails (Basic), plan Free Developer limité à 100 emails/mois.

Introduction

Postmark s'est forgé une réputation d'excellence dans l'email transactionnel, avec une philosophie claire : la délivrabilité avant tout. Acquis par ActiveCampaign en mai 2022, le service reste un produit autonome, conservant son équipe et son ADN technique. La plateforme traite des milliards d'emails avec un focus exclusif sur le transactionnel (confirmations de commande, réinitialisations de mot de passe, notifications).

La particularité de Postmark réside dans sa séparation stricte entre transactionnel et broadcast via les Message Streams. Cette architecture garantit que vos emails critiques ne soient jamais impactés par des campagnes marketing. Le pool d'IP partagé est activement monitoré pour maintenir une réputation irréprochable.

Ce guide s'adresse aux développeurs, DevOps et architectes système qui cherchent à intégrer Postmark avec une compréhension complète de l'infrastructure : configuration DNS, choix API vs SMTP, gestion des IP, webhooks et limites techniques.

API REST vs SMTP Relay : architecture et choix d'intégration

Postmark propose deux méthodes d'intégration, chacune adaptée à des cas d'usage spécifiques.

Comparaison entre API REST et SMTP Relay Postmark

Comparatif technique

CritèreAPI RESTSMTP Relay
EndpointPOST https://api.postmarkapp.com/emailsmtp.postmarkapp.com ports 587/2525
AuthentificationHeader X-Postmark-Server-TokenUsername: API key / Password: API key
Destinataires/email50 max (To + Cc + Bcc)50 max
Batch500 messages/appel, 50 MB max1 email par connexion
Taille max10 MB par email10 MB par email
TemplatesMustachio (Handlebars-like)Contenu inline uniquement
SchedulingNon supporté nativementNon supporté nativement
TrackingVia paramètres JSONVia headers X-PM-*
Cas d'usage idéalApps modernes, batch, templatesLegacy, CMS, serveurs mail existants

Quand choisir l'API REST ?

L'API REST est la méthode recommandée pour toute nouvelle intégration. Elle offre un contrôle précis sur chaque aspect de l'envoi.

Endpoint principal : POST https://api.postmarkapp.com/email

Headers requis :

Content-Type: application/json
Accept: application/json
X-Postmark-Server-Token: votre-server-token

Exemple d'envoi complet :

curl "https://api.postmarkapp.com/email" \
  -X POST \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "X-Postmark-Server-Token: votre-server-token" \
  -d '{
    "From": "notifications@captaindns.com",
    "To": "client@captaindns.com",
    "Subject": "Votre analyse DNS est prête",
    "TextBody": "Bonjour, votre rapport DNS est disponible.",
    "HtmlBody": "<html><body><strong>Bonjour</strong>, votre rapport DNS est disponible.</body></html>",
    "Tag": "dns-report",
    "TrackOpens": true,
    "TrackLinks": "HtmlAndText",
    "MessageStream": "outbound",
    "Metadata": {
      "report_id": "RPT-12345",
      "user_id": "USR-789"
    }
  }'

Réponse attendue (200 OK) :

{
  "To": "client@captaindns.com",
  "SubmittedAt": "2026-01-28T10:30:00.1234567-05:00",
  "MessageID": "b7bc2f4a-e38e-4336-af7d-e6c392c2f817",
  "ErrorCode": 0,
  "Message": "OK"
}

Limites clés :

  • Rate limit : non publié explicitement, monitoring interne
  • Destinataires : 50 max par email (To + Cc + Bcc)
  • Batch : 500 messages par appel, 50 MB total
  • Taille email : 10 MB max

SDKs officiels : Ruby, .NET, Java, PHP, Node.js. Pas de SDK Python officiel (utiliser postmarker ou python-postmark).

Quand choisir le SMTP Relay ?

Le SMTP Relay est idéal pour les systèmes legacy ou les applications qui ne supportent que SMTP.

Configuration officielle :

# Transactionnel
SMTP server: smtp.postmarkapp.com
Port: 587 (recommandé) ou 2525 (fallback)

# Broadcast
SMTP server: smtp-broadcasts.postmarkapp.com
Port: 587 ou 2525

# Authentification
Username: votre-server-api-token
Password: votre-server-api-token

Ports disponibles :

PortSupportNotes
25SMTP standard
465Implicit TLS non supporté
587Recommandé - port submission
2525Port alternatif

Méthodes d'authentification : CRAM-MD5 (recommandé), DIGEST-MD5, PLAIN, LOGIN.

Headers propriétaires X-PM-* :

HeaderUsageExemple
X-PM-TagCatégorisationX-PM-Tag: password-reset
X-PM-Message-StreamSpécifier le streamX-PM-Message-Stream: outbound
X-PM-Metadata-*Métadonnées customX-PM-Metadata-user-id: 12345
X-PM-TrackOpensTracking ouvertureX-PM-TrackOpens: true
X-PM-TrackLinksTracking liensX-PM-TrackLinks: HtmlAndText

Domain Authentication : DKIM, Return-Path et alignement DMARC

L'authentification de domaine chez Postmark repose sur DKIM et un Return-Path personnalisable. La configuration s'effectue dans Sender Signatures ou Domain Authentication.

Flux d'authentification DNS avec Postmark

Configuration DKIM

Postmark génère une clé DKIM 1024 bits avec un sélecteur unique basé sur un timestamp.

Format du sélecteur : [timestamp]pm._domainkey.captaindns.com

Exemples de sélecteurs :

  • 20260128pm._domainkey.captaindns.com
  • jan2026pm._domainkey.captaindns.com

Enregistrement DNS à créer :

Type: TXT
Hostname: 20260128pm._domainkey.captaindns.com
Value: k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO...

Caractéristiques :

  • Taille de clé : 1024 bits (pas 2048)
  • Rotation : manuelle, trimestrielle recommandée
  • API rotation : POST /domains/{domainid}/rotatedkim

La rotation utilise le système à deux sélecteurs : Postmark prépare le nouveau sélecteur avant de basculer, garantissant une transition sans interruption.

SPF : requis ou non ?

SPF n'est plus requis pour Postmark. Voici pourquoi :

Par défaut, Postmark utilise son propre domaine pour le Return-Path :

Return-Path: <pm_bounces@pm.mtasv.net>

Les serveurs récepteurs vérifient SPF contre le domaine Return-Path (pm.mtasv.net), pas contre votre domaine From (captaindns.com). Vos emails passent automatiquement SPF sans modification DNS de votre côté.

Include optionnel (si vous voulez être explicite) :

v=spf1 a mx include:spf.mtasv.net ~all

Return-Path custom et alignement DMARC

Pour obtenir l'alignement SPF DMARC, vous devez configurer un Return-Path personnalisé.

Enregistrement DNS requis :

Type: CNAME
Hostname: pm-bounces.captaindns.com
Value: pm.mtasv.net

Après configuration :

Return-Path: <pm_bounces@pm-bounces.captaindns.com>

Impact sur l'alignement DMARC :

ConfigurationSPF PassAlignement DMARC
Return-Path par défaut✅ (domaine Postmark)❌ Échoue
Return-Path custom✅ (sous-domaine client)✅ Relaxed uniquement

Point critique : l'alignement strict (aspf=s) n'est pas possible avec Postmark car le Return-Path utilise toujours un sous-domaine (pm-bounces.captaindns.comcaptaindns.com).

Stratégie recommandée : s'appuyer sur DKIM pour l'alignement DMARC, qui supporte le mode strict (adkim=s).

Tableau récapitulatif DNS complet

EnregistrementTypeHostnameValeurObligatoire
DKIMTXT[timestamp]pm._domainkey.captaindns.comk=rsa; p=[clé-publique]✅ Recommandé
Return-PathCNAMEpm-bounces.captaindns.compm.mtasv.netPour alignement DMARC
Link TrackingCNAME[custom].captaindns.com[valeur-postmark]Optionnel
SPFTXTcaptaindns.comv=spf1 include:spf.mtasv.net ~all❌ Non requis

Message Streams : transactionnel vs broadcast

Postmark impose une séparation stricte entre emails transactionnels et broadcast via les Message Streams. Cette architecture protège la réputation de vos emails critiques.

Architecture des streams

AspectTransactionnelBroadcast
UsageEmails déclenchés par utilisateurEmails bulk (newsletters)
SMTP hostsmtp.postmarkapp.comsmtp-broadcasts.postmarkapp.com
Lien unsubscribeOptionnelRequis
InfrastructurePool IP dédiéPool IP séparé
Stream par défautoutboundbroadcast

Lien unsubscribe obligatoire (Broadcast)

Pour les streams Broadcast, le lien de désinscription est obligatoire :

<a href="{{{ pm:unsubscribe }}}">Se désinscrire</a>

Gestion des désinscriptions :

  • UnsubscribeHandlingType: "Postmark" : géré automatiquement
  • UnsubscribeHandlingType: "None" : à gérer manuellement

Limites des Message Streams

RessourceLimite
Streams par Server10 max (contacter support pour plus)
Inbound Streams par Server1 uniquement
Nom de stream100 caractères max
Streams archivésSupprimés après 45 jours

IP partagée vs IP dédiée

Pool IP partagé (tous les plans)

Par défaut, tous les clients Postmark utilisent un pool d'IP partagé haute réputation.

Philosophie Postmark : "Un pool IP de haute qualité et haute réputation offre une délivrabilité meilleure et plus fiable" pour la majorité des expéditeurs.

Caractéristiques :

  • Pool activement monitoré
  • Alertes blacklist automatiques
  • Pas de warm-up nécessaire
  • Adapté pour la plupart des volumes

IP dédiée

Pour les gros volumes, Postmark propose des IP dédiées.

CritèreValeur
Volume minimum300 000 emails/mois
Coût50$/IP/mois (pas de frais de setup)
IP additionnelle100 000+ messages/jour requis
Warm-upAutomatique, 3-6 semaines
OverflowRouté via pool partagé pendant warm-up

Warm-up automatique :

  • Limites quotidiennes définies par Postmark
  • Ajustement selon la réponse des récepteurs
  • Volume excédentaire envoyé via pool partagé
  • Monitoring continu par l'équipe Postmark

Re-warmup requis : si le volume descend sous 20 000 messages/semaine pendant 4 semaines consécutives.

Reverse DNS : géré par Postmark (non personnalisable par le client).

Tarification 2026

Plans et prix

PlanPrix/mois (10K)Overage /1000ServersDomainsStreamsIP dédiée
Free Developer0$N/A101030
Basic15$1,80$5515
Pro16,50$1,30$101030✅ (300K+)
Platform18$1,20$✅ (300K+)

Limites du plan Free Developer :

  • 100 emails/mois (hard cap)
  • Pas d'overage possible
  • Idéal pour tests et développement

Scaling par volume

Volume mensuelTarif approximatif
10 00015-18$/mois
50 00050-60$/mois
125 000~100$/mois
300 000~200$/mois
700 000~400$/mois
5 000 000+Tarification custom

Add-ons optionnels

Add-onPrix
IP dédiée50$/mois/IP
Custom Activity RetentionÀ partir de 5$/mois
DMARC DigestsÀ partir de 14$/mois/domaine

Règles de comptage

  • Chaque message envoyé = 1 email
  • Chaque adresse Cc/Bcc = 1 email additionnel
  • Messages sandbox = comptabilisés
  • Emails non utilisés = non reportés

Webhooks et événements

Postmark propose un système de webhooks complet pour suivre le cycle de vie de vos emails.

Architecture webhooks Postmark

Événements disponibles

ÉvénementDescription
DeliveryEmail délivré au serveur récepteur
BounceEmail rebondi (hard, soft, transient)
OpenDestinataire a ouvert l'email
ClickDestinataire a cliqué un lien
SpamComplaintEmail marqué comme spam
SubscriptionChangeAjout/retrait de la liste Suppression
InboundEmail inbound reçu et parsé

Exemple de payload Bounce

{
  "RecordType": "Bounce",
  "ID": 692560173,
  "Type": "HardBounce",
  "TypeCode": 1,
  "Name": "Hard bounce",
  "Tag": "dns-report",
  "MessageID": "2c1b63fe-43f2-4db5-91b0-8bdfa44a9316",
  "ServerID": 23,
  "MessageStream": "outbound",
  "Description": "The server was unable to deliver your message",
  "Email": "invalide@captaindns.com",
  "From": "notifications@captaindns.com",
  "BouncedAt": "2026-01-28T16:09:19Z",
  "Inactive": true,
  "CanActivate": true
}

Politique de retry

Type webhookPolitique retry
Bounce, Inbound1 min → 5 min → 10 min (×3) → 15 min → 30 min → 1h → 2h → 6h = 10 retries sur ~10,5h
Click, Open, Delivery1 min → 5 min → 15 min = 3 retries

Important : une réponse HTTP 403 arrête immédiatement les retries.

Sécurité : signature HMAC-SHA256

Chaque webhook est signé avec le header X-Postmark-Signature.

Vérification (Node.js) :

const crypto = require('crypto');

function verifyWebhookSignature(payload, signature, secret) {
  const computedSignature = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('base64');
  return crypto.timingSafeEqual(
    Buffer.from(computedSignature),
    Buffer.from(signature)
  );
}

Configuration via API

curl "https://api.postmarkapp.com/webhooks" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "X-Postmark-Server-Token: votre-server-token" \
  -d '{
    "Url": "https://captaindns.com/webhooks/postmark",
    "MessageStream": "outbound",
    "Triggers": {
      "Delivery": { "Enabled": true },
      "Bounce": { "Enabled": true, "IncludeContent": false },
      "SpamComplaint": { "Enabled": true },
      "Open": { "Enabled": true, "PostFirstOpenOnly": true },
      "Click": { "Enabled": true }
    }
  }'

Limites techniques et quotas

Taille des messages

LimiteValeur
Taille max email (API)10 MB total
Taille max batch (Batch API)50 MB total
TextBody / HtmlBody5 MB chacun
Stockage message1 MB (tronqué au-delà)

Quotas API

RessourceLimite
Destinataires par email50 max (To + Cc + Bcc)
Messages par batch500 max
URLs webhook par stream10 max
Taille Tag1 000 caractères
Recherche bounces/messages10 000 résultats max

Rétention des données

TypeDurée
Rétention par défaut45 jours
Rétention minimum7 jours
Rétention maximum365 jours (add-on)
Bounce dumps30 jours max
Statistiques agrégéesIndéfiniment
Liste suppressionsIndéfiniment

Templates avec Mustachio

Postmark utilise Mustachio, un langage de templating basé sur Mustache avec des améliorations spécifiques.

Syntaxe de base

<!-- Variable avec échappement HTML -->
{{ prenom }}

<!-- Variable sans échappement (raw) -->
{{{ html_content }}}

<!-- Notation point -->
{{ commande.numero }}

Conditions (blocs truthy/falsy)

{{#has_discount}}
  <p>Votre réduction : {{ discount_amount }}</p>
{{/has_discount}}

{{^has_discount}}
  <p>Aucune réduction appliquée</p>
{{/has_discount}}

Boucles

{{#each items}}
  <li>{{ name }} - {{ price }} €</li>
{{/each}}

Limites :

  • Pas de syntaxe if/else explicite
  • Logique complexe non supportée
  • Tags <link> interdits dans <head>
  • CSS automatiquement inliné à l'envoi

Sécurité et conformité

Certifications

CertificationDétail
SOC 2 Type 2Non - certifications au niveau data center (AWS, Deft)
ISO 27017/27018Via AWS
PCI DSS Level 1Via Stripe (paiements)

RGPD

AspectDétail
DPA disponibleOui - avec SCCs
URL DPAhttps://postmarkapp.com/dpa
Localisation donnéesUS (pas d'option EU)
Représentant EUEU-REP.Global

HIPAA

AspectDétail
Conforme HIPAANON
BAA disponibleNON

Postmark déclare explicitement : "Postmark is not HIPAA-compliant so we do not recommend using our platform if you need to send HIPAA-compliant emails".

Authentification compte

FonctionnalitéDisponibilité
2FA✅ Tous les plans
SSO/SAML❌ Non disponible

Plan d'action : intégrer Postmark étape par étape

  1. Créer un compte sur https://account.postmarkapp.com/sign_up
  2. Demander l'approbation via "Request approval" (~24h de revue manuelle)
  3. Vérifier votre domaine (Sender Signature individuelle ou domaine complet)
  4. Configurer les enregistrements DNS :
    • DKIM : TXT [timestamp]pm._domainkey.captaindns.com
    • Return-Path : CNAME pm-bounces.captaindns.compm.mtasv.net
  5. Créer un Server API Token dans Settings → API Tokens
  6. Tester avec le token test : utiliser POSTMARK_API_TEST comme token pour valider sans envoyer
  7. Configurer les webhooks pour bounces et spam complaints
  8. Monitorer via l'Activity Feed et les statistiques

Guides techniques : autres plateformes email transactionnel

Decouvrez nos guides complets pour les autres solutions d'email transactionnel :

FAQ

Postmark est-il adapté à l'email marketing ?

Non, Postmark est spécialisé dans l'email transactionnel. Les emails broadcast (newsletters, annonces) sont supportés via des Message Streams séparés, mais la plateforme n'offre pas de fonctionnalités marketing avancées (segmentation, A/B testing, automation). Pour le marketing, considérez des solutions dédiées ou la plateforme mère ActiveCampaign.

Quelle est la différence entre Postmark et SendGrid ?

Postmark se concentre exclusivement sur la délivrabilité transactionnelle avec un pool IP très contrôlé. SendGrid offre plus de flexibilité (DKIM 2048 bits, rate limits publiés, plus de SDKs) mais avec un positionnement plus généraliste. Postmark utilise des clés DKIM 1024 bits et ne publie pas ses rate limits explicitement.

Peut-on utiliser Postmark avec une politique DMARC stricte ?

Oui, via DKIM. L'alignement DKIM supporte le mode strict (adkim=s). En revanche, l'alignement SPF ne fonctionne qu'en mode relaxed (aspf=r) car le Return-Path utilise un sous-domaine. Configurez votre politique DMARC pour s'appuyer sur DKIM : p=reject; adkim=s; aspf=r.

Combien coûte une IP dédiée chez Postmark ?

50$/mois par IP, sans frais de setup. Condition : envoyer au minimum 300 000 emails/mois. Le warm-up est automatique sur 3-6 semaines. Pour une IP additionnelle, il faut dépasser 100 000 messages/jour.

Y a-t-il un SDK Python officiel pour Postmark ?

Non, Postmark ne maintient pas de SDK Python officiel. Les alternatives communautaires recommandées sont postmarker et python-postmark. Les SDKs officiels couvrent Ruby, .NET, Java, PHP et Node.js.

Postmark est-il conforme HIPAA ?

Non. Postmark refuse explicitement de signer des BAAs (Business Associate Agreements). Si vous devez envoyer des PHI (Protected Health Information), utilisez une autre solution conforme HIPAA.

Glossaire

  • Message Stream : flux d'envoi séparé permettant d'isoler les emails transactionnels des broadcasts, chacun avec son propre pool d'IP et ses métriques
  • Sender Signature : vérification d'une adresse email expéditrice individuelle, alternative à la vérification de domaine complet
  • Return-Path : adresse de rebond (Envelope From) utilisée par les serveurs récepteurs pour SPF et les notifications de bounce
  • Mustachio : langage de templating de Postmark basé sur Mustache, avec support des conditions, boucles et variables

Sources officielles

Articles similaires