guide · api postmark

Comment une équipe produit doit-elle implémenter l’API Postmark en toute sécurité ?

Implémentez l’API Postmark derrière un worker serveur autorisé. Vérifiez le domaine d’envoi ou la signature d’expéditeur, isolez chaque environnement et chaque charge dans le serveur Postmark et le message stream appropriés, stockez le jeton de serveur dans un gestionnaire de secrets et enregistrez une tâche d’envoi applicative durable avant d’appeler POST /email. Ne soumettez que les champs approuvés, conservez le MessageID et l’ErrorCode exact renvoyés par Postmark, et considérez l’acceptation par l’API comme une preuve de traitement, pas de livraison. Sécurisez et dédupliquez les webhooks de livraison et de bounce, appliquez les suppressions de destinataires avant chaque envoi, rapprochez les timeouts ambigus et testez la rotation, les échecs partiels, les nouvelles tentatives et l’export avant la production.

Définissez la frontière applicative avant Postmark

Partez d’un événement métier autorisé, comme un reçu, une vérification, une alerte demandée ou un avis de sécurité. Enregistrez une tâche sortante durable avec une clé d’événement stable, le tenant, la catégorie de message, la révision du modèle, l’expéditeur et les destinataires approuvés, la base de consentement ou de nécessité, la décision de suppression en vigueur et l’état initial. Le navigateur, l’application mobile, le modèle et les saisies utilisateur ne doivent pas pouvoir choisir un jeton de serveur Postmark, une identité From arbitraire, un message stream, un webhook, un destinataire non restreint ou des métadonnées du fournisseur. Placez tous les appels au fournisseur derrière un adaptateur côté serveur unique. Séparez le trafic transactionnel du trafic broadcast ou marketing selon le modèle de consentement et de réputation du produit. L’API de Postmark transporte un message ; elle n’établit ni l’autorisation du tenant, ni le consentement du destinataire, ni l’idempotence métier. Prenez en charge la tâche interne une seule fois, enregistrez chaque tentative auprès du fournisseur et conservez les identifiants du fournisseur comme preuves liées à l’événement applicatif, plutôt que comme unique système de référence.

Utilisez des jetons de serveur à la portée opérationnelle étroite

L’API e-mail de Postmark documente l’en-tête X-Postmark-Server-Token pour l’accès à l’API limité à un serveur. Stockez chaque jeton dans un service de gestion de secrets et ne l’exposez qu’au worker qui a besoin de ce serveur et de cet environnement. Ne placez jamais de jetons dans le code client, le contrôle de version, les URL, les logs, les outils d’analyse, les modèles, les captures d’écran, les tickets, les prompts ou les jeux de test. Séparez la production du développement et des produits sans rapport, afin qu’une révocation ou un usage abusif ait un impact limité. Répétez la rotation : provisionnez un remplaçant via l’administration approuvée, mettez à jour le worker, envoyez des messages contrôlés, confirmez les preuves côté API et événements, puis révoquez l’ancien jeton. Traitez les erreurs d’authentification inattendues comme une condition de mise en pause, et non comme une invitation à réessayer rapidement les identifiants. Restreignez l’administration du tableau de bord par une authentification forte et des rôles. Un jeton de serveur autorise les opérations de l’API Postmark pour son serveur ; l’application doit toujours autoriser le tenant, l’expéditeur, le destinataire, le modèle et la catégorie de message.

Vérifiez l’identité exacte de l’expéditeur

Utilisez une signature d’expéditeur ou un domaine vérifié contrôlé par l’organisation, et confirmez l’adresse From exacte utilisée par chaque flux. Inventoriez, sur des échantillons bruts reçus, le domaine From visible, le return path SMTP, le domaine d= et le sélecteur DKIM, l’adresse de réponse et le message stream d’envoi. Ne publiez que les enregistrements DNS actuellement exigés par Postmark pour la configuration choisie, après avoir examiné la propriété existante de SPF, DKIM et DMARC. Conservez les valeurs précédentes et les instructions de retour arrière. La vérification par le fournisseur prouve que son contrôle de configuration a réussi ; elle ne prouve pas que chaque chemin applicatif utilise cette identité, que DMARC est aligné, que les destinataires ont consenti ni que les messages arrivent en boîte de réception. Gardez l’autorisation des expéditeurs par tenant dans l’application et bloquez les valeurs From d’un autre tenant. Testez les sous-domaines, les réponses, les bounces, les environnements hors production et les chemins de modèles. N’affaiblissez pas la politique SPF ou DMARC de l’organisation simplement pour faire passer un indicateur du tableau de bord au vert.

Construisez une requête POST email unique et explicite

Postmark documente POST /email avec des champs JSON pour l’expéditeur, les destinataires, l’objet, les corps texte ou HTML, ReplyTo, les en-têtes, les tags ou métadonnées, le message stream, les pièces jointes et les options de suivi. N’exposez que les champs dont le produit a besoin. Validez et normalisez les adresses, bornez le nombre de destinataires et de pièces jointes, rejetez l’injection d’en-têtes, échappez les valeurs des modèles selon le contexte de sortie et générez le texte et le HTML à partir d’une même révision approuvée. Ne placez pas de secrets ni de données personnelles superflues dans les tags, métadonnées, en-têtes, objets ou noms de pièces jointes, car ils peuvent apparaître dans l’activité et les événements du fournisseur. Sélectionnez MessageStream à partir d’une configuration de confiance, jamais d’une entrée de requête arbitraire. Gardez le payload du fournisseur dans un adaptateur unique pour que le code métier ne dépende pas de chaque champ Postmark. Stockez une révision du contenu ou un hash respectueux de la vie privée lorsque les besoins d’audit le justifient, plutôt que de journaliser le corps complet du message.

Interprétez la réponse immédiate de façon restrictive

L’endpoint d’envoi unitaire de Postmark documente des champs de réponse comme ErrorCode, Message, MessageID, SubmittedAt et des informations sur les destinataires. Enregistrez le statut HTTP exact et la réponse structurée du fournisseur avec la tentative applicative. Une réponse réussie et un MessageID montrent que Postmark a accepté la requête API selon sa sémantique documentée ; ils ne montrent pas que le serveur de destination a accepté le message ni qu’il est arrivé en boîte de réception. Classez les erreurs de validation, de signature d’expéditeur, d’authentification, de payload malformé, de quota et de politique avant toute nouvelle tentative. Un timeout de requête est ambigu, car Postmark a pu accepter l’opération alors que le client n’a pas reçu la réponse. Gardez cette tentative à l’état inconnu, recherchez l’activité du fournisseur ou les événements ultérieurs à l’aide de données de corrélation sûres, et appliquez une règle de rapprochement propre à la catégorie de message avant de renvoyer. Ne promettez jamais une livraison exactement une fois et ne créez pas un nouvel événement logique simplement parce qu’une requête HTTP a échoué.

Concevez les nouvelles tentatives à partir des preuves du fournisseur et du transport

Ne réessayez que les échecs réseau éligibles, les limites de débit et les erreurs serveur du fournisseur, avec un backoff exponentiel, du jitter, un nombre fini de tentatives et une limite d’âge dans la file. Corrigez les erreurs définitives de requête, d’expéditeur, de destinataire, de jeton, de modèle et de politique au lieu de les rejouer. Conservez la même clé d’événement applicatif et enregistrez des tentatives liées entre elles. Vérifiez à nouveau la suppression et l’autorisation juste avant chaque nouvelle tentative, car l’état du destinataire ou l’état métier peut changer pendant l’attente dans la file. Limitez la concurrence et le débit par serveur, tenant, message stream, domaine d’expéditeur et cohorte de destinations, afin qu’une panne ne puisse pas monopoliser la capacité. Arrêtez-vous en cas d’événement expiré, d’identité d’expéditeur révoquée, de plainte, de désinscription, d’échec définitif du destinataire ou de pause liée à un incident. Surveillez l’âge des nouvelles tentatives, les résultats inconnus, les classes de réponses, les échecs de jeton et la latence du fournisseur. Si Postmark effectue déjà des nouvelles tentatives SMTP en aval après l’acceptation, ne superposez pas une boucle applicative agressive de doublons à ce comportement de transport.

Sécurisez les webhooks de livraison et de bounce

Ne configurez que les types de webhooks Postmark dont l’application a besoin et utilisez HTTPS. Appliquez les contrôles de sécurité des webhooks actuellement documentés, restreignez l’endpoint au serveur ou au flux attendu, imposez des limites de taille de requête et de type de contenu, et ne faites jamais confiance aux identifiants de message, destinataires, tags, métadonnées ou diagnostics simplement parce que le JSON est analysable. Enregistrez ou mettez en file d’attente l’événement authentifié, ou admis de façon sûre par un autre moyen, avant de renvoyer un succès. Dédupliquez sur un identifiant d’événement stable du fournisseur lorsqu’il existe, ou sur une clé composite prudente qui ne peut pas fusionner destinataires, types d’événements ou tentatives. Conservez séparément l’heure de survenue et l’heure de traitement. Attendez-vous à des retards, des nouvelles tentatives, des doublons et des livraisons dans le désordre. Associez le MessageID et les métadonnées de confiance au tenant et à la tâche internes avant de modifier un état. Faites tourner les identifiants ou URL des webhooks indépendamment des jetons d’API, surveillez les requêtes non autorisées et le retard de traitement, et ne conservez les payloads bruts que le temps justifié par les besoins opérationnels et les règles internes.

Modélisez les états de livraison, de bounce et de suppression

Transposez les preuves de livraison et de bounce de Postmark dans un modèle interne par destinataire, en conservant le type d’origine du fournisseur, le MessageID, l’horodatage, le statut ou la classification du bounce, et le diagnostic. L’acceptation par l’API, le traitement par Postmark, l’acceptation par le serveur de destination, une non-livraison ultérieure, le dossier de la boîte aux lettres et l’engagement sont des états différents. Un événement « delivered » reflète normalement l’observation documentée du fournisseur au niveau du serveur de destination, pas une vue sur le dossier final. Les échecs temporaires peuvent justifier un traitement de transport borné ; les échecs d’adresse définitifs confirmés doivent entraîner une suppression limitée au destinataire. Les plaintes et les désinscriptions doivent mettre à jour la sécurité du destinataire avant les tâches suivantes. Protégez la réactivation manuelle par une autorisation, une raison et un historique d’audit. Conservez un état du consentement et des suppressions appartenant au produit pour qu’une migration ne fasse pas disparaître la protection des destinataires. N’inférez pas la lecture humaine du suivi des ouvertures ou des clics, qui relève de l’instrumentation de l’engagement et peut être affecté par les technologies de protection de la vie privée.

Testez la sandbox, la production et les chemins d’échec

Utilisez les outils de test ou de sandbox documentés par Postmark et des destinataires contrôlés dédiés, et non de vraies adresses clients, pour provoquer des échecs déterministes. Testez les jetons valides et invalides, les identités From non autorisées, les destinataires approuvés et bloqués, le texte et le HTML, l’Unicode, les pièces jointes, la minimisation des métadonnées, les message streams, les timeouts de requête avant et après acceptation, la réponse de limitation de débit, l’authentification des webhooks, la livraison en double, les événements dans le désordre, les classifications de bounce, la suppression et la rotation des jetons. Vérifiez les en-têtes bruts reçus, l’alignement DKIM et DMARC, Reply-To, la configuration du suivi et la corrélation du MessageID. Confirmez que les environnements hors production ne peuvent pas atteindre les destinataires de production. Effectuez des tests d’export et de migration pour les suppressions et les preuves opérationnelles. Refusez le lancement en cas d’accès à l’expéditeur ou aux événements d’un autre tenant, de suppressions non appliquées, d’admission ambiguë des webhooks, de secrets dans les logs, de nouvelles tentatives non bornées ou d’incapacité à mettre en pause en toute sécurité le serveur ou le flux concerné.

Comment SendHQ s’intègre

SendHQ est une API e-mail limitée à l’espace de travail pour les communications produit attendues. Sa documentation publique couvre l’envoi depuis un domaine vérifié, les e-mails entrants, les modèles hébergés, les événements de livraison, les suppressions et un tableau de bord web.

Questions fréquentes

Quel endpoint envoie un e-mail unique via Postmark ?

L’API e-mail actuelle de Postmark documente POST /email avec un jeton de serveur et des champs de message JSON structurés. Ne l’appelez que depuis du code serveur autorisé.

Où stocker un jeton de serveur Postmark ?

Stockez-le dans un système de gestion de secrets côté serveur, avec une portée étroite par environnement et par charge, des accès audités, une rotation testée et aucune exposition côté client.

Une réponse réussie de l’API Postmark prouve-t-elle la livraison ?

Non. Elle atteste l’acceptation par le fournisseur au titre du contrat d’API immédiat. L’acceptation par le serveur de destination, le bounce, le placement en boîte aux lettres et l’engagement nécessitent des preuves ultérieures au périmètre défini.

Comment réessayer après un timeout de requête Postmark ?

Considérez comme ambigu un timeout survenu après une soumission possible. Rapprochez l’activité du fournisseur ou les événements ultérieurs avant de renvoyer, en utilisant la même clé d’événement métier durable.

Peut-on supposer que les webhooks Postmark sont uniques et ordonnés ?

Non. Prévoyez les retards, les nouvelles tentatives, les doublons et l’arrivée dans le désordre. Sécurisez l’admission, enregistrez durablement les événements, dédupliquez-les et appliquez des transitions monotones par destinataire.

Les métadonnées Postmark peuvent-elles contenir des secrets clients ?

Non. Utilisez des valeurs de corrélation bornées et respectueuses de la vie privée. Les métadonnées, tags, en-têtes, vues d’activité, événements, logs et exports peuvent exposer ces champs en exploitation.

Un événement « delivered » prouve-t-il l’arrivée en boîte de réception ?

Non. C’est une preuve du fournisseur au périmètre limité, généralement l’acceptation par le serveur de destination. Le filtrage du destinataire, les règles de boîte aux lettres, le dossier final et l’engagement humain restent distincts.

Où trouver la documentation de l’API SendHQ ?

Consultez la documentation publique de SendHQ sur son API e-mail, l’envoi depuis un domaine vérifié, les e-mails entrants, les modèles, les événements de livraison et les suppressions.

Sources