การผสาน Temp Mail เข้ากับการทดสอบและ CI

REST API ของ Mail.td ออกแบบมาสำหรับการทดสอบ end-to-end — ตรวจสอบว่าการลงทะเบียน การรีเซ็ตรหัสผ่าน และเวิร์กโฟลว์ที่กระตุ้นด้วยอีเมลทำงานถูกต้อง คู่มือนี้มุ่งเน้น รูปแบบการผสาน สำหรับเครื่องมือทดสอบทั่วไป

สำหรับเอกสารอ้างอิง endpoint ดิบ (รูปแบบคำขอ/การตอบสนอง) ดู หน้า API หรือ docs.mail.td

Selenium / Playwright / Cypress

รูปแบบ: สร้างกล่องจดหมายใหม่ก่อนแต่ละการทดสอบ ลงทะเบียนแอปด้วยที่อยู่นั้น แล้ว polling API หาอีเมลยืนยัน

// pseudocode — ปรับให้เข้ากับเฟรมเวิร์กการทดสอบใดก็ได้
async function signUpFlow(page) {
  // 1. สร้างกล่องจดหมายชั่วคราว
  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. ลงทะเบียนแอปด้วย mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Polling สำหรับอีเมลยืนยัน (สูงสุด 30 วินาที)
  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) {
      // การตอบสนองรายการไม่มีเนื้อหา — ดึงรายละเอียดข้อความเพื่อรับ 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));
  }
}

ไปป์ไลน์ CI/CD

สำหรับ GitHub Actions, GitLab CI, CircleCI หรือไปป์ไลน์ใด:

  • เก็บ API token หนึ่งเป็น CI secret (หมุนจากแดชบอร์ดเมื่อรั่วไหล)
  • งานทดสอบแต่ละงานสร้างกล่องจดหมาย ของตัวเอง — ป้องกัน race condition ระหว่างงานคู่ขนาน
  • ใช้ที่อยู่ที่ไม่ซ้ำต่อการทดสอบ (เช่น test-${RUN_ID}-${TEST_ID}@mail.td) เพื่อให้ดีบักความล้มเหลวง่ายขึ้น
  • ไม่ต้องล้าง — กล่องจดหมายหมดอายุอัตโนมัติ ไม่ต้องสคริปต์ล้าง

Webhook สำหรับไปป์ไลน์ที่เร็วขึ้น (Pro)

Polling เพิ่มความหน่วงให้แต่ละการทดสอบ สำหรับชุดทดสอบยาว ลงทะเบียน URL webhook ที่รับ POST เมื่ออีเมลใหม่มาถึง การทดสอบของคุณรอการส่ง webhook แทนที่จะ polling 30 ครั้ง ลดเวลารอทั่วไป 5–15 วินาทีให้น้อยกว่า 1 วินาที

Webhook ลงนามด้วย HMAC-SHA256 — ตรวจสอบ signature header ก่อนประมวลผล

การติดตั้ง SDK

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

สำหรับการอ้างอิง endpoint แบบเต็ม ดู mail.td/api

คำถามที่พบบ่อย

ฉันได้ API token ที่ไหน?

แดชบอร์ด Pro → API Tokens → Create โทเค็นมีคำนำหน้า `td_` และแสดงเพียงครั้งเดียวในเวลาสร้าง — คัดลอกและเก็บไว้ใน CI secrets หรือผู้จัดการรหัสผ่าน

ขีดจำกัดอัตราคืออะไร?

Free 1 คำขอ/วินาที; Pro 10 คำขอ/วินาที เมื่อถึงขีดจำกัด API จะส่งคืน 429 พร้อม header `Retry-After`

ลายเซ็น webhook ทำงานอย่างไร?

POST webhook แต่ละครั้งมี signature header ที่ได้มาจาก webhook secret ของคุณ ตรวจสอบลายเซ็นก่อนประมวลผล payload เพื่อยืนยันว่าคำขอมาจาก Mail.td และไม่ถูกแก้ไข

ฉันสามารถรันการทดสอบ end-to-end แบบคู่ขนานได้หรือไม่?

ได้ — ให้กล่องจดหมายแก่งานทดสอบคู่ขนานแต่ละงานเพื่อป้องกัน race condition โควตา 100,000 op/เดือนของ Pro ครอบคลุมกรณี CI ส่วนใหญ่

API ทำงานกับบัญชี Free หรือไม่?

Free รวม 500 การเรียก API ต่อเดือน — เหมาะสำหรับสคริปต์เบาๆ สำหรับ CI/CD หรือทรูพุตสูงขึ้น อัปเกรดเป็น Pro: 100,000 op/เดือนและอัตราคำขอที่สูงขึ้น