Tích hợp Temp Mail vào tests và CI

REST API của Mail.td được thiết kế cho kiểm thử end-to-end — xác minh đăng ký, đặt lại mật khẩu và workflow kích hoạt bằng email hoạt động đúng. Hướng dẫn này tập trung vào mẫu tích hợp cho công cụ kiểm thử thông dụng.

Tham chiếu endpoint thô (định dạng request/response) xem trang API hoặc docs.mail.td.

Selenium / Playwright / Cypress

Mẫu: tạo hộp thư mới trước mỗi test, đăng ký ứng dụng với địa chỉ đó, sau đó polling API cho email xác minh.

// Mã giả — thích nghi với mọi framework test
async function signUpFlow(page) {
  // 1. Tạo hộp thư tạm
  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. Đăng ký ứng dụng với mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polling cho email xác minh (lên đến 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) {
      // Phản hồi danh sách không có body — lấy chi tiết tin nhắn để có 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

Cho GitHub Actions, GitLab CI, CircleCI hoặc bất kỳ pipeline nào:

  • Lưu một API token làm CI secret (xoay vòng từ bảng điều khiển khi rò rỉ)
  • Mỗi job test tạo hộp thư riêng — ngăn race condition giữa các job song song
  • Dùng địa chỉ duy nhất cho mỗi test (ví dụ test-${RUN_ID}-${TEST_ID}@mail.td) để debug thất bại dễ hơn
  • Không cần dọn dẹp — hộp thư hết hạn tự động, không cần script dọn dẹp

Webhook cho pipeline nhanh hơn (Pro)

Polling thêm độ trễ cho mỗi test. Cho test suite dài, đăng ký URL webhook nhận POST khi email mới đến. Test của bạn chờ phân phối webhook thay vì polling 30 lần. Cắt thời gian chờ thông thường 5–15 giây xuống dưới 1 giây.

Webhook được ký bằng HMAC-SHA256 — xác minh header chữ ký trước khi xử lý.

Cài đặt SDK

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

Tham chiếu endpoint đầy đủ: mail.td/api.

Câu hỏi thường gặp

Tôi lấy API token ở đâu?

Bảng điều khiển Pro → API Tokens → Create. Token có tiền tố `td_` và chỉ hiển thị một lần khi tạo — sao chép và lưu trong CI secret hoặc trình quản lý mật khẩu.

Giới hạn tốc độ là bao nhiêu?

Free là 1 yêu cầu/giây; Pro là 10 yêu cầu/giây. Khi đạt giới hạn, API trả về 429 với header `Retry-After`.

Chữ ký webhook hoạt động thế nào?

Mỗi POST webhook chứa header chữ ký được dẫn xuất từ webhook secret của bạn. Xác minh chữ ký trước khi xử lý payload để xác nhận yêu cầu đến từ Mail.td và không bị thay đổi.

Tôi có thể chạy test end-to-end song song không?

Có — đưa cho mỗi job test song song hộp thư riêng để ngăn race condition. Hạn ngạch 100.000 op/tháng của Pro bao trùm hầu hết trường hợp CI.

API có hoạt động với tài khoản Free không?

Free bao gồm 500 thao tác API mỗi tháng — phù hợp cho scripting nhẹ. Cho CI/CD hoặc throughput cao hơn, nâng cấp Pro: 100.000 op/tháng và tốc độ yêu cầu cao hơn.