Integrando Temp Mail em testes e CI

A API REST do Mail.td foi feita para testes end-to-end — verificar que cadastros, redefinições de senha e workflows acionados por e-mail funcionam corretamente. Este guia foca em padrões de integração para ferramentas de teste comuns.

Para referência crua de endpoints (formatos de requisição/resposta), veja a página de API ou docs.mail.td.

Selenium / Playwright / Cypress

O padrão: criar uma caixa nova antes de cada teste, cadastrar seu app com esse endereço, depois fazer polling da API pelo e-mail de verificação.

// Pseudocódigo — adaptável a qualquer framework de teste
async function signUpFlow(page) {
  // 1. Criar caixa temporária
  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. Cadastre seu app com mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polling pelo e-mail de verificação (até 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) {
      // A resposta da listagem não traz o corpo — busque o detalhe da mensagem para o 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 ou qualquer pipeline:

  • Guarde um token de API como segredo de CI (rotacione do painel se vazar)
  • Cada job de teste cria sua própria caixa — evita race conditions entre jobs paralelos
  • Use um endereço único por teste (ex: test-${RUN_ID}-${TEST_ID}@mail.td) para depurar falhas mais fácil
  • Não precisa limpar — caixas expiram automaticamente, sem script de limpeza

Webhooks para pipelines mais rápidos (Pro)

Polling adiciona latência a cada teste. Para suítes longas, registre uma URL de webhook que recebe um POST quando chega e-mail novo. Seu teste espera a entrega do webhook em vez de fazer polling 30 vezes. Reduz uma espera típica de 5–15 segundos para menos de 1 segundo.

Webhooks são assinados com HMAC-SHA256 — verifique o header de assinatura antes de processar.

Instalação do SDK

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

Para referência completa de endpoints, veja mail.td/api.

Perguntas frequentes

Onde consigo um token de API?

Painel Pro → API Tokens → Create. Tokens têm prefixo `td_` e são mostrados só uma vez na criação — copie e guarde nos seus segredos de CI ou gerenciador de senhas.

Qual é o limite de taxa?

Free é 1 requisição/segundo; Pro é 10 requisições/segundo. Se atingir o limite, a API retorna 429 com header `Retry-After`.

Como funcionam as assinaturas de webhook?

Cada POST de webhook inclui um header de assinatura derivado do seu segredo de webhook. Verifique a assinatura antes de processar o payload para confirmar que a requisição veio do Mail.td e não foi adulterada.

Posso rodar testes end-to-end em paralelo?

Sim — dê a cada job paralelo sua própria caixa para evitar race conditions. A cota de 100,000 ops/mês do Pro cobre a maioria dos casos de CI.

A API funciona para contas Free?

Free inclui 500 operações de API por mês — adequado para scripting leve. Para CI/CD ou qualquer coisa que precise de mais throughput, suba para Pro com 100,000 ops/mês e taxa de requisição maior.