Mengintegrasikan Temp Mail ke dalam tes dan CI

REST API Mail.td dirancang untuk pengujian end-to-end — memverifikasi pendaftaran, reset kata sandi, dan workflow yang dipicu email berperilaku benar. Panduan ini berfokus pada pola integrasi untuk alat tes umum.

Untuk referensi endpoint mentah (format request/response), lihat halaman API atau docs.mail.td.

Selenium / Playwright / Cypress

Pola: buat kotak baru sebelum setiap tes, daftarkan aplikasi Anda dengan alamat itu, lalu polling API untuk email verifikasi.

// Pseudokode — beradaptasi ke kerangka tes apa pun
async function signUpFlow(page) {
  // 1. Buat kotak temporer
  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. Daftarkan app dengan mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polling untuk email verifikasi (hingga 30 detik)
  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) {
      // Respons daftar tidak menyertakan body — ambil detail pesan untuk 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

Untuk GitHub Actions, GitLab CI, CircleCI, atau pipeline mana pun:

  • Simpan satu token API sebagai rahasia CI (rotasi dari dasbor jika bocor)
  • Setiap job tes membuat kotak sendiri — hindari race condition antar job paralel
  • Gunakan alamat unik per tes (mis. test-${RUN_ID}-${TEST_ID}@mail.td) untuk memudahkan debug kegagalan
  • Tidak perlu pembersihan — kotak kedaluwarsa otomatis, tidak butuh skrip cleanup

Webhook untuk pipeline lebih cepat (Pro)

Polling menambah latensi setiap tes. Untuk suite tes panjang, daftarkan URL webhook yang menerima POST saat email baru tiba. Tes menunggu pengiriman webhook alih-alih polling 30 kali. Memotong tunggu 5–15 detik biasa menjadi kurang dari 1 detik.

Webhook ditandatangani dengan HMAC-SHA256 — verifikasi header tanda tangan sebelum memproses.

Instalasi SDK

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

Referensi endpoint lengkap: mail.td/api.

Pertanyaan yang sering diajukan

Di mana saya mendapatkan token API?

Dasbor Pro → API Tokens → Create. Token berawalan `td_` dan hanya ditampilkan sekali saat pembuatan — salin dan simpan di rahasia CI atau pengelola kata sandi Anda.

Berapa batas laju?

Free 1 permintaan/detik; Pro 10 permintaan/detik. Jika mencapai batas, API mengembalikan 429 dengan header `Retry-After`.

Bagaimana tanda tangan webhook bekerja?

Setiap POST webhook menyertakan header tanda tangan yang diturunkan dari rahasia webhook Anda. Verifikasi tanda tangan sebelum memproses payload untuk memastikan permintaan dari Mail.td dan tidak diubah.

Bisakah saya menjalankan tes end-to-end paralel?

Ya — beri setiap job tes paralel kotak sendiri untuk mencegah race condition. Kuota 100.000 op/bulan Pro mencakup sebagian besar kasus CI.

Apakah API berfungsi untuk akun Free?

Free mencakup 500 operasi API per bulan — cocok untuk skrip ringan. Untuk CI/CD atau throughput lebih tinggi, naik ke Pro: 100.000 op/bulan dan laju permintaan lebih tinggi.