Postmark (ActiveCampaign) : Guide technique complet pour l'email transactionnel
Par CaptainDNS
Publié le 28 janvier 2026

- 📢 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.comavec headerX-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.com→pm.mtasv.netpour 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.

Comparatif technique
| Critère | API REST | SMTP Relay |
|---|---|---|
| Endpoint | POST https://api.postmarkapp.com/email | smtp.postmarkapp.com ports 587/2525 |
| Authentification | Header X-Postmark-Server-Token | Username: API key / Password: API key |
| Destinataires/email | 50 max (To + Cc + Bcc) | 50 max |
| Batch | 500 messages/appel, 50 MB max | 1 email par connexion |
| Taille max | 10 MB par email | 10 MB par email |
| Templates | Mustachio (Handlebars-like) | Contenu inline uniquement |
| Scheduling | Non supporté nativement | Non supporté nativement |
| Tracking | Via paramètres JSON | Via headers X-PM-* |
| Cas d'usage idéal | Apps modernes, batch, templates | Legacy, 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 :
| Port | Support | Notes |
|---|---|---|
| 25 | ✅ | SMTP standard |
| 465 | ❌ | Implicit TLS non supporté |
| 587 | ✅ | Recommandé - port submission |
| 2525 | ✅ | Port alternatif |
Méthodes d'authentification : CRAM-MD5 (recommandé), DIGEST-MD5, PLAIN, LOGIN.
Headers propriétaires X-PM-* :
| Header | Usage | Exemple |
|---|---|---|
X-PM-Tag | Catégorisation | X-PM-Tag: password-reset |
X-PM-Message-Stream | Spécifier le stream | X-PM-Message-Stream: outbound |
X-PM-Metadata-* | Métadonnées custom | X-PM-Metadata-user-id: 12345 |
X-PM-TrackOpens | Tracking ouverture | X-PM-TrackOpens: true |
X-PM-TrackLinks | Tracking liens | X-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.

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.comjan2026pm._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 :
| Configuration | SPF Pass | Alignement 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.com ≠ captaindns.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
| Enregistrement | Type | Hostname | Valeur | Obligatoire |
|---|---|---|---|---|
| DKIM | TXT | [timestamp]pm._domainkey.captaindns.com | k=rsa; p=[clé-publique] | ✅ Recommandé |
| Return-Path | CNAME | pm-bounces.captaindns.com | pm.mtasv.net | Pour alignement DMARC |
| Link Tracking | CNAME | [custom].captaindns.com | [valeur-postmark] | Optionnel |
| SPF | TXT | captaindns.com | v=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
| Aspect | Transactionnel | Broadcast |
|---|---|---|
| Usage | Emails déclenchés par utilisateur | Emails bulk (newsletters) |
| SMTP host | smtp.postmarkapp.com | smtp-broadcasts.postmarkapp.com |
| Lien unsubscribe | Optionnel | Requis |
| Infrastructure | Pool IP dédié | Pool IP séparé |
| Stream par défaut | outbound | broadcast |
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é automatiquementUnsubscribeHandlingType: "None": à gérer manuellement
Limites des Message Streams
| Ressource | Limite |
|---|---|
| Streams par Server | 10 max (contacter support pour plus) |
| Inbound Streams par Server | 1 uniquement |
| Nom de stream | 100 caractères max |
| Streams archivés | Supprimé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ère | Valeur |
|---|---|
| Volume minimum | 300 000 emails/mois |
| Coût | 50$/IP/mois (pas de frais de setup) |
| IP additionnelle | 100 000+ messages/jour requis |
| Warm-up | Automatique, 3-6 semaines |
| Overflow | Routé 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
| Plan | Prix/mois (10K) | Overage /1000 | Servers | Domains | Streams | IP dédiée |
|---|---|---|---|---|---|---|
| Free Developer | 0$ | N/A | 10 | 10 | 30 | ❌ |
| Basic | 15$ | 1,80$ | 5 | 5 | 15 | ❌ |
| Pro | 16,50$ | 1,30$ | 10 | 10 | 30 | ✅ (300K+) |
| Platform | 18$ | 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 mensuel | Tarif approximatif |
|---|---|
| 10 000 | 15-18$/mois |
| 50 000 | 50-60$/mois |
| 125 000 | ~100$/mois |
| 300 000 | ~200$/mois |
| 700 000 | ~400$/mois |
| 5 000 000+ | Tarification custom |
Add-ons optionnels
| Add-on | Prix |
|---|---|
| IP dédiée | 50$/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.

Événements disponibles
| Événement | Description |
|---|---|
| Delivery | Email délivré au serveur récepteur |
| Bounce | Email rebondi (hard, soft, transient) |
| Open | Destinataire a ouvert l'email |
| Click | Destinataire a cliqué un lien |
| SpamComplaint | Email marqué comme spam |
| SubscriptionChange | Ajout/retrait de la liste Suppression |
| Inbound | Email 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 webhook | Politique retry |
|---|---|
| Bounce, Inbound | 1 min → 5 min → 10 min (×3) → 15 min → 30 min → 1h → 2h → 6h = 10 retries sur ~10,5h |
| Click, Open, Delivery | 1 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
| Limite | Valeur |
|---|---|
| Taille max email (API) | 10 MB total |
| Taille max batch (Batch API) | 50 MB total |
| TextBody / HtmlBody | 5 MB chacun |
| Stockage message | 1 MB (tronqué au-delà) |
Quotas API
| Ressource | Limite |
|---|---|
| Destinataires par email | 50 max (To + Cc + Bcc) |
| Messages par batch | 500 max |
| URLs webhook par stream | 10 max |
| Taille Tag | 1 000 caractères |
| Recherche bounces/messages | 10 000 résultats max |
Rétention des données
| Type | Durée |
|---|---|
| Rétention par défaut | 45 jours |
| Rétention minimum | 7 jours |
| Rétention maximum | 365 jours (add-on) |
| Bounce dumps | 30 jours max |
| Statistiques agrégées | Indéfiniment |
| Liste suppressions | Indé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
| Certification | Détail |
|---|---|
| SOC 2 Type 2 | Non - certifications au niveau data center (AWS, Deft) |
| ISO 27017/27018 | Via AWS |
| PCI DSS Level 1 | Via Stripe (paiements) |
RGPD
| Aspect | Détail |
|---|---|
| DPA disponible | Oui - avec SCCs |
| URL DPA | https://postmarkapp.com/dpa |
| Localisation données | US (pas d'option EU) |
| Représentant EU | EU-REP.Global |
HIPAA
| Aspect | Détail |
|---|---|
| Conforme HIPAA | NON |
| BAA disponible | NON |
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
- Créer un compte sur https://account.postmarkapp.com/sign_up
- Demander l'approbation via "Request approval" (~24h de revue manuelle)
- Vérifier votre domaine (Sender Signature individuelle ou domaine complet)
- Configurer les enregistrements DNS :
- DKIM : TXT
[timestamp]pm._domainkey.captaindns.com - Return-Path : CNAME
pm-bounces.captaindns.com→pm.mtasv.net
- DKIM : TXT
- Créer un Server API Token dans Settings → API Tokens
- Tester avec le token test : utiliser
POSTMARK_API_TESTcomme token pour valider sans envoyer - Configurer les webhooks pour bounces et spam complaints
- 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 :
- SendGrid : authentification domaine et Web API v3 - DKIM 2048 bits avec rotation, IP dediee des 50k/mois
- Mailgun : DKIM avec rotation automatique - Return-Path natif, rotation DKIM 120 jours
- Amazon SES : Easy DKIM et Custom MAIL FROM - 0.10$/1000 emails, 7 regions EU
- Mailjet : API v3.1 et configuration DKIM - DKIM 2048/4096 bits, acquisition Sinch
- Mandrill : integration Mailchimp transactional - Prerequis Mailchimp Standard, blocs 25k emails
- Brevo : configuration DKIM et SPF - 300 emails/jour gratuits, DKIM TXT ou CNAME
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


