Integrar Temp Mail en pruebas y CI

La API REST de Mail.td está diseñada para pruebas end-to-end — verificar que registros, restablecimientos de contraseña y workflows desencadenados por correo se comportan correctamente. Esta guía se centra en patrones de integración para herramientas de pruebas comunes.

Para la referencia bruta de endpoints (formas de petición/respuesta), ver la página de API o docs.mail.td.

Selenium / Playwright / Cypress

El patrón: crear una bandeja nueva antes de cada prueba, registrar tu app con esa dirección, después hacer polling de la API por el correo de verificación.

// Pseudocódigo — adaptable a cualquier framework de pruebas
async function signUpFlow(page) {
  // 1. Crear bandeja temporal
  const mailbox = await fetch("https://api.mail.td/api/accounts", {
    method: "POST",
    headers: {
      Authorization: "Bearer td_xxx",
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      address: `test-${Date.now()}@mail.td`,
      password: "secret"
    })
  }).then(r => r.json());

  // 2. Registra tu app con mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polling por el correo de verificación (hasta 30s)
  for (let i = 0; i < 30; i++) {
    const list = await fetch(
      `https://api.mail.td/api/accounts/${mailbox.id}/messages`,
      { headers: { Authorization: "Bearer td_xxx" } }
    ).then(r => r.json());
    if (list.messages.length > 0) {
      // La respuesta de listado no trae el cuerpo — pide el detalle del mensaje para el text_body
      const msg = await fetch(
        `https://api.mail.td/api/accounts/${mailbox.id}/messages/${list.messages[0].id}`,
        { headers: { Authorization: "Bearer td_xxx" } }
      ).then(r => r.json());
      const link = extractLink(msg.text_body);
      await page.goto(link);
      break;
    }
    await new Promise(r => setTimeout(r, 1000));
  }
}

Pipelines CI/CD

Para GitHub Actions, GitLab CI, CircleCI o cualquier pipeline:

  • Guarda un token API como secreto de CI (rótalo desde el panel si se filtra)
  • Cada job de prueba crea su propia bandeja — evita race conditions entre jobs paralelos
  • Usa una dirección única por prueba (p. ej., test-${RUN_ID}-${TEST_ID}@mail.td) para depurar fallos más fácil
  • No hace falta limpiar — las bandejas caducan automáticamente, no se necesita script de limpieza

Webhooks para pipelines más rápidos (Pro)

El polling añade latencia a cada prueba. Para suites de pruebas largas, registra una URL webhook que reciba un POST cuando llega correo nuevo. Tu prueba espera la entrega del webhook en lugar de hacer polling 30 veces. Reduce una espera típica de 5–15 segundos a menos de 1 segundo.

Los webhooks están firmados con HMAC-SHA256 — verifica el header de firma antes de procesar.

Instalación de SDK

npm install mailtd       # Node.js / TypeScript
pip install mailtd       # Python
go get github.com/mailtd/mailtd-go    # Go

Para la referencia completa de endpoints, ver mail.td/api.

Preguntas frecuentes

¿Dónde obtengo un token API?

Panel Pro → API Tokens → Create. Los tokens tienen prefijo `td_` y se muestran solo una vez al crearse — cópialos y guárdalos en tus secretos de CI o gestor de contraseñas.

¿Cuál es el límite de tasa?

Free es 1 petición/segundo; Pro es 10 peticiones/segundo. Si superas el límite, la API responde 429 con un header `Retry-After`.

¿Cómo funcionan las firmas de webhook?

Cada POST de webhook incluye un header de firma derivado de tu secreto de webhook. Verifica la firma antes de procesar el payload para confirmar que la petición vino de Mail.td y no fue manipulada.

¿Puedo correr pruebas end-to-end en paralelo?

Sí — da a cada job de prueba paralelo su propia bandeja para evitar race conditions. La cuota de 100,000 ops/mes de Pro cubre la mayoría de casos de CI.

¿La API funciona para cuentas Free?

Free incluye 500 operaciones API al mes — adecuado para scripting ligero. Para CI/CD o cualquier cosa que necesite mayor throughput, pasa a Pro por 100,000 ops/mes y mayor velocidad de petición.