Integrare Temp Mail in test e CI

L'API REST di Mail.td è progettata per i test end-to-end — verificare che iscrizioni, reset password e workflow innescati da e-mail si comportino correttamente. Questa guida si concentra sui pattern di integrazione per i tool di test comuni.

Per il riferimento grezzo degli endpoint (formati richiesta/risposta), vedi la pagina API o docs.mail.td.

Selenium / Playwright / Cypress

Il pattern: crea una casella nuova prima di ogni test, registra la tua app con quell'indirizzo e poi interroga l'API per la mail di verifica.

// Pseudocodice — adattabile a qualsiasi framework di test
async function signUpFlow(page) {
  // 1. Crea casella temporanea
  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 l'app con mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polling per la mail di verifica (fino a 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 risposta della lista non include il body — recupera il dettaglio per 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));
  }
}

Pipeline CI/CD

Per GitHub Actions, GitLab CI, CircleCI o qualsiasi pipeline:

  • Memorizza un token API come segreto CI (ruotalo dal pannello in caso di leak)
  • Ogni job di test crea la propria casella — evita race tra job paralleli
  • Usa un indirizzo unico per test (es. test-${RUN_ID}-${TEST_ID}@mail.td) per facilitare il debug
  • Niente da pulire — le caselle scadono in automatico, nessuno script di cleanup

Webhook per pipeline più rapide (Pro)

Il polling aggiunge latenza a ogni test. Per suite lunghe, registra una URL webhook che riceve un POST all'arrivo di una nuova mail. Il test attende la consegna del webhook invece di pollare 30 volte. Riduce un'attesa tipica di 5–15 secondi a meno di 1.

I webhook sono firmati con HMAC-SHA256 — verifica l'header di firma prima di processare.

Installazione SDK

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

Riferimento completo degli endpoint: mail.td/api.

Domande frequenti

Dove ottengo un token API?

Pannello Pro → API Tokens → Create. I token hanno prefisso `td_` e sono mostrati una sola volta alla creazione — copiali e conservali nei segreti CI o in un password manager.

Qual è il rate limit?

Free: 1 richiesta/secondo; Pro: 10 richieste/secondo. Al raggiungimento del limite, l'API risponde 429 con header `Retry-After`.

Come funzionano le firme dei webhook?

Ogni POST webhook include un header di firma derivato dal tuo secret webhook. Verifica la firma prima di processare il payload per confermare che la richiesta arrivi da Mail.td e non sia stata manomessa.

Posso eseguire test end-to-end in parallelo?

Sì — assegna a ogni job parallelo la propria casella per evitare race. La quota Pro di 100 000 op/mese copre la maggior parte dei casi CI.

L'API funziona con account Free?

Free include 500 operazioni API al mese — adatto a scripting leggero. Per CI/CD o throughput più alto, passa a Pro per 100 000 op/mese e rate maggiore.