Démarrer
Premier envoi depuis Node.js
Copier le client Mail, poser ta clé dans une variable d'environnement, envoyer un premier e-mail et gérer la réponse, en TypeScript ou en JavaScript.
À la fin de cette page, un e-mail sera parti depuis ton script Node.js, et tu le verras dans E-mails.
Avant de commencer
- Un domaine vérifié dans ton espace, avec le statut Prêt. Sans lui, l’API refuse l’expéditeur. Voir Ajouter un domaine.
- Une clé d’API, créée dans Clés d’API. Elle commence par
am_. Copie-la tout de suite : elle n’est plus jamais affichée.
Récupère le client
Le client est un seul fichier, sans dépendance. Il fonctionne avec Node, Bun, Deno et les environnements edge. Ouvre-le, copie tout son contenu dans ton projet, par exemple dans
src/lib/agentmail.ts.Tu peux aussi appeler l’API directement avec
fetch. Les deux formes sont décrites dans Envoyer depuis ton logiciel.Mets la clé dans `.env`
Dans le fichier
.envà la racine de ton projet :AGENTMAIL_API_KEY=am_…Ajoute
.envà ton.gitignoresi ce n’est pas déjà fait. Le client litAGENTMAIL_API_KEYtout seul. Bun et Next.js chargent.envd’eux-mêmes. Avec Node 20.6 ou plus, lance ton script avecnode --env-file=.env.Envoie un premier e-mail
import { Agentmail } from "./lib/agentmail"const mail = new Agentmail()const { id } = await mail.emails.send({from: "Hugo <hugo@envoi.tonentreprise.ch>",to: "toi@tonentreprise.ch",subject: "Premier envoi depuis Node",html: "<p>Ça marche. Ce message part de ton domaine.</p>",text: "Ça marche. Ce message part de ton domaine.",})console.log("E-mail parti :", id)fromdoit être une adresse d’un domaine vérifié de ton espace.toaccepte une adresse ou un tableau d’adresses.Lis la réponse et gère l'erreur
Un envoi réussi renvoie
{ id }. Garde cetid: il sert à retrouver l’e-mail dans l’application et avecGET /emails/:id.Quand l’API refuse la requête, le client lève une
AgentmailError. Elle indique ce qui s’est passé et si un nouvel essai a des chances d’aboutir :import { Agentmail, AgentmailError } from "./lib/agentmail"const mail = new Agentmail()try {const { id } = await mail.emails.send({from: "Hugo <hugo@envoi.tonentreprise.ch>",to: "toi@tonentreprise.ch",subject: "Premier envoi depuis Node",html: "<p>Ça marche.</p>",})console.log("E-mail parti :", id)} catch (error) {if (error instanceof AgentmailError) {console.error(error.statusCode, error.name, error.message)if (error.retryable) {// Réessayer plus tard a des chances d'aboutir.}}throw error}Les cas les plus fréquents :
Ce que tu vois Ce qu’il faut faire 422 validation_errorCorrige le champ indiqué dans le message. Ne réessaie pas tel quel. 403 invalid_api_keyLa clé est fausse ou révoquée. Vérifie AGENTMAIL_API_KEY.429 rate_limit_exceededTrop d’envois en peu de temps. Attends quelques secondes, puis réessaie. 429 daily_quota_exceededLe quota du jour est atteint. Inutile de réessayer avant le lendemain. 500 internal_server_errorErreur de notre côté. Réessaie avec la même clé d’idempotence. Le client ne réessaie seul un envoi que si tu lui fournis une clé d’idempotence. Sans elle, un nouvel essai pourrait doubler le message. Envoyer sans doublon décrit la boucle de réessai complète.
Vérifie dans l'application
Ouvre E-mails. Ton message est en tête de liste, avec son parcours : en attente, envoyé, arrivé, puis ouvert si le destinataire affiche les images. Les liens partent tels quels : les clics ne sont mesurés que pour les campagnes et les workflows. Les statuts sont expliqués dans Statuts des e-mails.
Si ça ne marche pas
403 invalid_api_key: la clé est mal copiée, ou elle a été révoquée. Crée-en une nouvelle dans Clés d’API et remplace la valeur dans.env.422 validation_errorsurfrom: l’adresse n’appartient pas à un domaine vérifié de ton espace, ou son domaine n’est pas encore Prêt.- La variable
AGENTMAIL_API_KEYest vide : ton script ne lit pas le fichier.env. Lance-le avecnode --env-file=.envou charge.envavant l’import.
Et ensuite
Les routes, les champs, les réponses et les en-têtes, au même endroit.
Envoi seul, envoi par lot, et lecture du statut d’un e-mail.
Relancer un envoi après une coupure sans que le destinataire reçoive deux fois le message.
Chaque code d’erreur, sa cause et la réaction attendue.
Cette page t'a aidé ?
Merci, c'est noté.