Configurer l'envoi d'emails pour les agents IA
Un parcours lisible par machine pour les agents de codage et assistants qui doivent ajouter l'envoi d'emails transactionnels à un projet tiers — quoi appeler, dans quel ordre, et quelles vérifications exécuter avant chaque envoi.
Télécharger OpenAPI 3.1Avant d'écrire le moindre code
- Demandez à l'utilisateur une clé API de projet, ou proposez-lui de créer une clé sandbox sur https://app.srs-postline.com/fr/login — n'inventez, ne devinez et ne réutilisez jamais une clé provenant d'un autre projet.
- Placez la clé dans une variable d'environnement côté serveur. Ne la placez pas dans du code frontend, un bundle d'application mobile, un dépôt public ou un fichier .env committé.
- Lisez /llms.txt et openapi/postline.yaml avant de générer du code de requête ; ne devinez pas les noms de champs ou les points de terminaison.
Envoi minimal
POST /v1/emails
Authorization: Bearer srs_live_...
Idempotency-Key: <id-stable-par-envoi-logique>
Content-Type: application/json
{
"from": "Sender Name <info@example.com>",
"to": ["user@example.net"],
"subject": "Objet",
"html": "<p>Corps</p>",
"text": "Corps"
}Vérifications à exécuter avant chaque envoi
- Envoyez toujours un Idempotency-Key dérivé de l'action déclenchante (ID de commande, ID d'événement) afin que les nouvelles tentatives ne puissent pas provoquer un double envoi.
- Ne placez jamais de codes OTP, de jetons de réinitialisation de mot de passe ou d'autres secrets dans un champ qui est journalisé ou transmis en dehors du corps du message.
- Demandez la portée de clé API la plus étroite dont la tâche a besoin (emails:send suffit pour l'envoi ; ne demandez pas domains:write ou api_keys:write sauf si la tâche l'exige).
- Limitez les destinataires à 100 par appel. L’API actuelle n’accepte ni pièces jointes ni en-têtes personnalisés ; refusez le fichier ou partagez un lien sans prétendre qu’il a été joint.
- Ne relancez pas silencieusement en cas de réponse 4xx. Seuls 429 et 503 peuvent être relancés en toute sécurité, et uniquement avec un backoff.
Traiter chaque code de réponse
- 202 — mis en file d'attente, pas livré. Enregistrez l'id retourné si vous devez consulter le statut plus tard.
- 400 — payload invalide ; corrigez la requête, ne relancez pas telle quelle.
- 401 — clé invalide ou expirée ; arrêtez-vous et signalez-le à l'utilisateur, ne fabriquez pas de nouvelle clé.
- 403 — portée manquante ou le domaine d'envoi n'est pas encore vérifié ; demandez à l'utilisateur de vérifier le domaine avant de continuer.
- 422 — le destinataire est supprimé (bounce/plainte antérieurs) ; ne relancez pas l'envoi vers ce destinataire.
- 429 — limite de débit atteinte ; patientez et relancez plus tard, ne bouclez pas de manière serrée.
- 503 — file d'attente indisponible ; relancez avec un backoff, ne basculez pas vers un transport non officiel.
Si la tâche inclut la réception d'événements
Enregistrez un point de terminaison webhook exclusivement en HTTPS. Recalculez vous-même la signature avant de faire confiance à un payload ; ne sautez pas la vérification parce qu'une requête « paraît interne ».
signature = HMAC-SHA256(webhook_secret, timestamp + "\0" + event_id + "\0" + raw_body)
comparer à l'en-tête Postline-Signature (comparaison à temps constant)
rejeter si Postline-Timestamp est en dehors de votre fenêtre autorisée
stocker event_id et traiter chaque événement exactement une foisRéférences lisibles par machine
- /llms.txt — index condensé de ces règles pour les fenêtres de contexte des agents.
- /openapi/postline.yaml — schéma OpenAPI 3.1 complet de chaque point de terminaison.
- /fr/api/ — référence API pour humains.
- /fr/webhooks/ — détails sur la signature et les relances des webhooks.
Modèle d’accès actuel
Les clés actuelles utilisent srs_live_. Avant la vérification du domaine From, l’expéditeur sandbox partagé ne peut écrire qu’aux membres du projet. Ensuite s’appliquent quotas, suppression, limites destinataires et contrôles anti-abus. 202 signifie mis en file, pas livré.
Ressources d’intégration
Utilisez le guide pratique pour humains et agents IA ; OpenAPI fait foi pour les champs.