Integracja Temp Mail z testami i CI

REST API Mail.td jest zaprojektowane do testów end-to-end — weryfikacji, że rejestracje, resety hasła i workflow wyzwalane e-mailem zachowują się poprawnie. Ten przewodnik skupia się na wzorcach integracji dla popularnych narzędzi testowych.

Dla surowego odniesienia endpointu (formaty żądania/odpowiedzi) zobacz stronę API lub docs.mail.td.

Selenium / Playwright / Cypress

Wzorzec: utwórz nową skrzynkę przed każdym testem, zarejestruj aplikację z tym adresem, a następnie odpytuj API o e-mail weryfikacyjny.

// Pseudokod — adaptuje się do dowolnego frameworka testowego
async function signUpFlow(page) {
  // 1. Utwórz tymczasową skrzynkę
  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. Zarejestruj aplikację z mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polluj e-mail weryfikacyjny (do 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) {
      // Odpowiedź listy nie zawiera body — pobierz szczegóły wiadomości, aby uzyskać 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));
  }
}

Potoki CI/CD

Dla GitHub Actions, GitLab CI, CircleCI lub dowolnego potoku:

  • Przechowuj jeden token API jako sekret CI (rotuj z panelu po wycieku)
  • Każde zadanie testowe tworzy własną skrzynkę — zapobiega race condition między równoległymi zadaniami
  • Używaj unikalnego adresu na test (np. test-${RUN_ID}-${TEST_ID}@mail.td), by ułatwić debugowanie awarii
  • Brak potrzeby czyszczenia — skrzynki wygasają automatycznie, brak skryptu czyszczącego

Webhooki dla szybszych potoków (Pro)

Polling dodaje opóźnienie do każdego testu. Dla długich zestawów testowych zarejestruj URL webhooka, który otrzymuje POST gdy nowy e-mail dociera. Twój test czeka na dostarczenie webhooka zamiast pollingu 30 razy. Skraca typowe oczekiwanie 5–15 sekund do mniej niż 1 sekundy.

Webhooki są podpisane HMAC-SHA256 — zweryfikuj nagłówek podpisu przed przetwarzaniem.

Instalacja SDK

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

Pełne odniesienie endpointu zobacz mail.td/api.

Najczęściej zadawane pytania

Skąd wziąć token API?

Panel Pro → API Tokens → Create. Tokeny mają prefiks `td_` i są pokazywane tylko raz przy tworzeniu — skopiuj i zapisz w sekretach CI lub menedżerze haseł.

Jaki jest limit szybkości?

Free to 1 żądanie/sekundę; Pro to 10 żądań/sekundę. Po osiągnięciu limitu API zwraca 429 z nagłówkiem `Retry-After`.

Jak działają podpisy webhooków?

Każdy POST webhooka zawiera nagłówek podpisu wyprowadzony z Twojego sekretu webhooka. Zweryfikuj podpis przed przetwarzaniem payloadu, by potwierdzić, że żądanie pochodzi z Mail.td i nie zostało zmodyfikowane.

Czy mogę uruchamiać testy end-to-end równolegle?

Tak — daj każdemu równoległemu zadaniu testowemu własną skrzynkę, by zapobiec race condition. Limit Pro 100 000 ops/miesiąc pokrywa większość przypadków CI.

Czy API działa dla kont Free?

Free obejmuje 500 operacji API miesięcznie — odpowiednie dla lekkiego scriptingu. Dla CI/CD lub większej przepustowości zaktualizuj do Pro: 100 000 ops/miesiąc i wyższy limit żądań.