Essayer maintenant
Aucun compte nécessaire. Vous obtenez une boîte privée pendant 10 minutes au maximum et pouvez la supprimer à tout moment. Une nouvelle boîte d’essai peut être créée une fois toutes les 10 minutes par réseau.
- Essai
- Sans inscription · 1 boîte · 10 minutes · cet onglet uniquement
- Jeton développeur
- Compte vérifié · 5 boîtes simultanées · jusqu’à 60 minutes · REST et MCP
Vérifiez votre adresse e-mail pour créer des clés API révocables, à portée limitée.
- Créer une boîte
- Attendre un e-mail
- Lire le message
Boîte d’essai privée
La clé d’essai reste dans la mémoire de cet onglet. Si vous rechargez la page, vous perdez l’accès ; la boîte expire quand même automatiquement.
Les messages sont affichés en texte brut. Les codes et les liens sont détectés pour vous, mais jamais ouverts. Les pièces jointes se téléchargent via l’API privée.
Démarrage rapide avec curl
Créez une boîte, attendez le prochain e-mail, lisez-le, puis supprimez la boîte. Conservez votre clé API dans TEMPGENERATOR_TOKEN et ne la mettez jamais dans une URL.
Nécessite curl et jq. Le script effectue jusqu’à trois attentes de 20 secondes, affiche l’objet, les codes, les liens et le texte de chaque message, puis supprime la boîte.
export TEMPGENERATOR_URL='https://www.tempgenerator.com'
API="$TEMPGENERATOR_URL/developer-api/v1"
AUTH="Authorization: Bearer $TEMPGENERATOR_TOKEN"
INBOX=$(curl --fail-with-body -sS -X POST "$API/inboxes" -H "$AUTH" -H 'Accept: application/json')
ID=$(printf '%s' "$INBOX" | jq -r .id)
echo "Send a test email to $(printf '%s' "$INBOX" | jq -r .address)"
for ATTEMPT in 1 2 3; do
RESULT=$(curl --fail-with-body -sS "$API/inboxes/$ID/wait?after=0&timeout=20" -H "$AUTH" -H 'Accept: application/json')
[ "$(printf '%s' "$RESULT" | jq -r .status)" = message ] && break
done
for MESSAGE in $(printf '%s' "$RESULT" | jq -r '.messages[].id'); do
curl --fail-with-body -sS "$API/inboxes/$ID/messages/$MESSAGE" -H "$AUTH" -H 'Accept: application/json' \
| jq '{subject, codes, links, text}'
done
curl --fail-with-body -sS -X DELETE "$API/inboxes/$ID" -H "$AUTH"
L’API en bref
URL de base : https://www.tempgenerator.com/developer-api/v1. Envoyez Authorization: Bearer <key> avec chaque requête. Les réponses sont en JSON ; les erreurs ont la forme {"error": {"code", "message", "retry_after"}}, et les erreurs de quota envoient aussi un en-tête Retry-After.
-
POST /Créer une boîte et obtenir son adresse et sa date d’expirationinboxes -
GET /Attendre jusqu’à 20 secondes le prochain message après un curseurinboxes/ {id}/ wait ?after=0&timeout=20 -
GET /Lister jusqu’à 50 messages après un curseur, du plus ancien au plus récentinboxes/ {id}/ messages ?after=0 -
GET /Lire un message : texte, codes, liens et liste des pièces jointesinboxes/ {id}/ messages/ {message_id} -
GET /Télécharger une pièce jointe par son indexinboxes/ {id}/ messages/ {message_id}/ attachments/ {index} -
DELETE /Supprimer immédiatement la boîte et ses messagesinboxes/ {id}
Les requêtes de liste et d’attente acceptent les filtres facultatifs from et subject_contains : correspondance « contient », insensible à la casse, sur l’expéditeur et l’objet.
Exemple de réponse de lecture
{
"id": 42,
"from": "no-reply@app.example",
"subject": "Your verification code",
"received_at": "2026-10-03T09:41:07+00:00",
"text": "Your verification code is 482913.\nOr confirm: https://app.example/verify?token=8f3c",
"text_truncated": false,
"codes": [
"482913"
],
"links": [
"https://app.example/verify?token=8f3c"
],
"expires_at": "2026-10-03T10:40:12+00:00",
"attachments": [
{
"index": 0,
"filename": "receipt.pdf",
"size": 48213
}
],
"untrusted_content": true
}
Jetons développeur
Créez des clés API dans « Accès développeur » une fois votre adresse e-mail vérifiée. Une clé en lecture et écriture peut créer, lire et supprimer des boîtes ; une clé en lecture seule peut lister, attendre, lire et télécharger. Les clés expirent après 90 jours, un compte peut détenir 10 clés actives, et la révocation d’une clé prend effet immédiatement.
Chaque clé n’est affichée qu’une fois et n’est stockée que sous forme de hachage SHA-256. Révoquer une clé ne supprime pas ses boîtes : les autres clés valides du compte y conservent l’accès jusqu’à ce que les boîtes expirent ou soient supprimées.
Gérer les clés APIAttendre le prochain e-mail sans sleep()
GET …/wait garde la requête ouverte et répond dès qu’un message arrive, ou à l’expiration du délai (20 secondes au maximum) avec le statut timeout. Transmettez le next_cursor de la réponse précédente comme paramètre after pour ne jamais lire deux fois le même message.
Un timeout n’est pas un échec de livraison : relancez l’attente avec le même curseur. Une seule attente s’exécute par boîte, et une attente plus récente sur la même boîte remplace la précédente ; les attentes sur des boîtes différentes s’exécutent en parallèle, jusqu’à 2 à la fois par compte.
Tester les e-mails avec Playwright, Cypress, pytest et en CI
Donnez à chaque test sa propre boîte, déclenchez l’e-mail d’inscription ou de réinitialisation de mot de passe de votre application, attendez-le et faites vos assertions sur le code ou le lien. Supprimez la boîte lors du nettoyage (teardown).
Stockez la clé dans un secret CI, par exemple TEMPGENERATOR_TOKEN dans GitHub Actions. Cypress peut effectuer les mêmes appels HTTP avec cy.request, et la recette Python ci-dessous fonctionne avec pytest ou tout autre lanceur de tests.
Playwright (TypeScript)
import { test, expect } from '@playwright/test';
const api = `${process.env.TEMPGENERATOR_URL}/developer-api/v1`;
const headers = { Authorization: `Bearer ${process.env.TEMPGENERATOR_TOKEN}`, Accept: 'application/json' };
async function call(path: string, method = 'GET') {
const response = await fetch(api + path, { method, headers });
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);
return response.status === 204 ? null : response.json();
}
async function waitForCode(inboxId: string, after = 0): Promise<string> {
for (let attempt = 0; attempt < 3; attempt++) {
const result = await call(`/inboxes/${inboxId}/wait?after=${after}&timeout=20`);
for (const summary of result.messages) {
const message = await call(`/inboxes/${inboxId}/messages/${summary.id}`);
if (message.codes.length) return message.codes[0];
}
after = result.next_cursor;
}
throw new Error('No verification code arrived');
}
test('signup sends a verification code', async ({ page }) => {
const inbox = await call('/inboxes', 'POST');
try {
await page.goto('/signup');
await page.getByLabel('Email').fill(inbox.address);
await page.getByRole('button', { name: 'Create account' }).click();
await page.getByLabel('Verification code').fill(await waitForCode(inbox.id));
await expect(page.getByText('Welcome')).toBeVisible();
} finally {
await call(`/inboxes/${inbox.id}`, 'DELETE');
}
});
GitHub Actions
- name: End-to-end tests
run: npx playwright test
env:
TEMPGENERATOR_URL: https://www.tempgenerator.com
TEMPGENERATOR_TOKEN: ${{ secrets.TEMPGENERATOR_TOKEN }}
Vérification d’inscription en Python
Exécutez le script une fois vos variables d’environnement définies. Il affiche une nouvelle boîte ; envoyez un e-mail d’inscription à cette adresse depuis votre propre application de test, puis appuyez sur Entrée. Il attend jusqu’à 15 secondes, affiche chaque message avec ses codes et ses liens, et supprime la boîte même si la lecture échoue.
import json, os
from urllib.request import Request, urlopen
base = os.environ["TEMPGENERATOR_URL"].rstrip("/") + "/developer-api/v1"
headers = {"Authorization": "Bearer " + os.environ["TEMPGENERATOR_TOKEN"],
"Accept": "application/json"}
def request(path, method="GET"):
with urlopen(Request(base + path, headers=headers, method=method), timeout=30) as response:
return json.load(response) if response.status != 204 else None
inbox = request("/inboxes", "POST")
print(json.dumps(inbox), flush=True)
try:
input()
result = request("/inboxes/" + inbox["id"] + "/wait?after=0&timeout=15")
print(json.dumps(result))
for message in result["messages"]:
detail = request("/inboxes/" + inbox["id"] + "/messages/" + str(message["id"]))
print(json.dumps(detail))
finally:
request("/inboxes/" + inbox["id"], "DELETE")
Serveur MCP pour agents IA
Point de terminaison https://www.tempgenerator.com/mcp, authentifié avec Authorization: Bearer <key>. Streamable HTTP avec le protocole 2026-07-28 ; les clients plus anciens sont pris en charge via la négociation 2025-11-25 ou 2025-06-18.
Connecter votre client
Claude Code
claude mcp add --transport http tempgenerator-mail https://www.tempgenerator.com/mcp \
--header "Authorization: Bearer $TEMPGENERATOR_TOKEN"
Cursor : .cursor/mcp.json
{
"mcpServers": {
"tempgenerator-mail": {
"url": "https://www.tempgenerator.com/mcp",
"headers": { "Authorization": "Bearer ${env:TEMPGENERATOR_TOKEN}" }
}
}
}
VS Code : .vscode/mcp.json
{
"inputs": [
{ "type": "promptString", "id": "tempgenerator-token", "description": "TempGenerator API key", "password": true }
],
"servers": {
"tempgenerator-mail": {
"type": "http",
"url": "https://www.tempgenerator.com/mcp",
"headers": { "Authorization": "Bearer ${input:tempgenerator-token}" }
}
}
}
Claude sur le web et l’application de bureau : ajoutez un connecteur personnalisé avec l’URL du point de terminaison, ne choisissez aucune méthode de connexion et ajoutez l’en-tête de requête Authorization: Bearer <key>. Claude se connectant depuis le cloud d’Anthropic, l’URL doit être accessible publiquement.
Outils
create_inbox- Crée une boîte privée et renvoie son identifiant et son adresse.
list_messages- Liste les résumés des messages après un curseur, avec des filtres facultatifs sur l’expéditeur et l’objet.
wait_for_message- Attend le prochain message pendant 20 secondes au maximum.
read_message- Lit le texte, les codes, les liens et la liste des pièces jointes d’un message.
delete_inbox- Supprime la boîte et ses messages.
Exemple de prompt
Créez une boîte temporaire et donnez-moi son adresse. Ensuite, attendez l’e-mail de vérification de mon application de préproduction et indiquez-moi le code.
Ne laissez les agents finaliser des inscriptions que pour des comptes qui vous appartiennent ou que vous avez l’autorisation d’utiliser. Les e-mails reçus ne sont pas fiables : le serveur n’ouvre jamais les liens, et les agents ne doivent jamais suivre les instructions trouvées dans un message.
SDK MCP pour Python
Testé avec Python 3 et le paquet officiel mcp 2.3.0 : pip install "mcp>=2.3,<3". Définissez d’abord TEMPGENERATOR_URL et TEMPGENERATOR_TOKEN.
import asyncio, os
import httpx2
from mcp import Client
from mcp.client.streamable_http import streamable_http_client
async def main():
url = os.environ["TEMPGENERATOR_URL"].rstrip("/") + "/mcp"
headers = {"Authorization": "Bearer " + os.environ["TEMPGENERATOR_TOKEN"]}
async with httpx2.AsyncClient(headers=headers, timeout=httpx2.Timeout(30, read=60)) as http:
async with Client(streamable_http_client(url, http_client=http)) as client:
print([tool.name for tool in (await client.list_tools()).tools])
created = await client.call_tool("create_inbox", {})
if created.is_error:
raise RuntimeError(created.content)
inbox = created.structured_content
try:
print("Send a test email to", inbox["address"])
waited = await client.call_tool("wait_for_message", {"inbox_id": inbox["id"], "timeout": 20})
for summary in waited.structured_content["messages"]:
message = await client.call_tool("read_message", {"inbox_id": inbox["id"], "message_id": summary["id"]})
print(message.structured_content["subject"], message.structured_content["codes"])
finally:
deleted = await client.call_tool("delete_inbox", {"inbox_id": inbox["id"]})
if deleted.is_error:
raise RuntimeError(deleted.content)
asyncio.run(main())
Pièces jointes
La lecture d’un message renvoie l’index, le nom de fichier et la taille de chaque pièce jointe. Téléchargez-en une avec GET …/attachments/{index} : les fichiers de 10 Mo maximum sont servis en application/octet-stream avec des noms de fichiers nettoyés. Les clients MCP voient la même liste et téléchargent via ce point de terminaison REST.
Quand l’utiliser plutôt que d’autres outils
Mailpit, MailHog et Ethereal capturent les e-mails que votre propre application envoie à un serveur SMTP local ou factice, ce qui est idéal lorsque vous contrôlez les paramètres SMTP. Ces boîtes sont de vraies adresses sur un domaine public, joignables par n’importe quel expéditeur : un service tiers, un serveur de préproduction qui utilise votre véritable fournisseur d’e-mail, ou un flux proche de la production.
Les API d’e-mail temporaire généralistes comme mail.tm ou Guerrilla Mail sont conçues pour des adresses jetables personnelles. Cette API est conçue pour l’automatisation : clés limitées en portée et en durée, une boîte par test, une attente en long polling bornée, des codes et liens détectés, et un serveur MCP.
Non inclus : envoi d’e-mails, SMS, aperçus HTML ou anti-spam, domaines personnalisés et connexion OAuth pour les clients MCP.
Conservation, limites et sécurité
| Limite | Essai | Jeton développeur |
|---|---|---|
| Durée de vie d’une boîte | 10 minutes | Jusqu’à 60 minutes |
| Boîtes actives | 1 | 5 par compte |
| Nouvelles boîtes | Une toutes les 10 minutes par réseau | 20 par heure |
| Requêtes API | 120 par minute | 120 par minute |
| Attente (long polling) | Jusqu’à 20 secondes, une par boîte | Jusqu’à 20 secondes, une par boîte, 2 à la fois |
| Messages par boîte | Jusqu’à 10 | Jusqu’à 10 |
| Texte du message renvoyé | Premiers 128 Ko | Premiers 128 Ko |
| Téléchargement des pièces jointes | Jusqu’à 10 Mo chacune | Jusqu’à 10 Mo chacune |
| Accès | Cet onglet du navigateur uniquement | API REST et MCP avec vos clés |
Un domaine de réception peut imposer une durée de vie plus courte ou une limite de messages plus basse.
Réception uniquement. Considérez les e-mails et les pièces jointes comme non fiables ; rien n’est ouvert automatiquement. La suppression d’une boîte efface immédiatement ses messages, et les boîtes expirées sont supprimées par un nettoyage planifié.
Questions fréquentes
Qu’est-ce qu’une API d’e-mail temporaire ?
Une API HTTP qui crée à la demande des boîtes e-mail jetables et permet à votre code de lire ce qui y arrive. Ici, chaque boîte est réservée à votre clé, expire automatiquement et peut être lue via REST ou MCP.
Ai-je besoin d’un compte ?
Pas pour essayer : l’essai crée une boîte privée de 10 minutes dans votre navigateur. Pour les clés API, l’accès MCP et des boîtes à plus longue durée de vie, créez un compte et vérifiez votre adresse e-mail.
Combien de temps durent les boîtes ?
Les boîtes d’essai durent 10 minutes. Les boîtes créées avec un jeton développeur durent jusqu’à 60 minutes, ou moins si le domaine de réception impose une durée de vie plus courte. Vous pouvez supprimer une boîte à tout moment.
Comment attendre un e-mail dans un test ?
Appelez le point de terminaison wait, ou l’outil wait_for_message, avec le dernier curseur. Il répond dès qu’un message arrive, ou au bout de 20 secondes au maximum avec le statut timeout ; relancez alors l’attente avec le même curseur. Évitez les pauses de durée fixe.
Comment récupérer l’OTP ou le lien de vérification ?
Lisez le message. La réponse contient son texte brut ainsi que les champs codes (codes à usage unique probables, trouvés près de mots comme code, OTP ou vérification) et links (liens http et https issus du texte et du HTML). Ce sont des indications : vérifiez-les dans le texte.
Puis-je télécharger les pièces jointes ?
Oui. La lecture d’un message liste l’index, le nom et la taille de chaque pièce jointe ; téléchargez-en une depuis le point de terminaison des pièces jointes. Les fichiers de 10 Mo maximum sont pris en charge.
À quoi un jeton donne-t-il accès et quand expire-t-il ?
Une clé appartient à un seul compte vérifié et n’accède qu’aux boîtes de ce compte. Les clés en lecture et écriture peuvent créer et supprimer des boîtes ; les clés en lecture seule peuvent lister, attendre, lire et télécharger. Les clés expirent après 90 jours et peuvent être révoquées instantanément.
Comment connecter Claude Code ou Cursor ?
Utilisez le point de terminaison https://www.tempgenerator.com/mcp avec un en-tête Authorization: Bearer. Dans Claude Code, exécutez claude mcp add --transport http avec --header ; dans Cursor, ajoutez une entrée avec url et headers dans .cursor/mcp.json. Les deux extraits figurent plus haut.
Les agents peuvent-ils finaliser des inscriptions ?
Uniquement pour des comptes qui vous appartiennent ou que vous avez l’autorisation d’utiliser, comme l’environnement de préproduction de votre propre application. Le serveur n’ouvre jamais les liens. Un agent ne doit utiliser un code ou un lien que pour terminer un parcours que vous avez demandé, et ne jamais suivre les instructions écrites dans un e-mail.
Les tests peuvent-ils s’exécuter en parallèle ou en CI ?
Oui. Donnez à chaque test sa propre boîte : les attentes sur des boîtes différentes s’exécutent en parallèle. Un compte peut avoir 5 boîtes actives et en créer 20 par heure ; supprimez donc les boîtes lors du nettoyage (teardown) et conservez la clé dans un secret CI.
Puis-je supprimer une boîte avant son expiration ?
Oui. Envoyez une requête DELETE sur la boîte, ou appelez delete_inbox, pour la supprimer immédiatement avec ses messages. Supprimer une boîte d’essai ne raccourcit pas le délai de 10 minutes avant que votre réseau puisse en créer une nouvelle.
Quelle est la différence avec Mailpit ou MailHog ?
Mailpit et MailHog exécutent un serveur SMTP local qui capture les e-mails envoyés par votre propre application. Ici, ce sont de vraies boîtes sur un domaine public, joignables par n’importe quel expéditeur, avec une API, des attentes en long polling et MCP.
Quelles sont les limites ?
Les boîtes d’essai durent 10 minutes. Un compte développeur peut avoir 5 boîtes actives, en créer 20 par heure, effectuer 120 requêtes API par minute et attendre jusqu’à 20 secondes par requête. Chaque boîte reçoit jusqu’à 10 messages.
Puis-je envoyer des e-mails ou utiliser un domaine personnalisé ?
Non. Les boîtes servent uniquement à la réception et utilisent les domaines de réception de ce site. L’envoi, les SMS et les domaines personnalisés ne sont pas pris en charge.