ادغام Temp Mail در تست‌ها و CI

REST API Mail.td برای تست‌های سرتاسری طراحی شده — تأیید درست بودن ثبت‌نام، بازنشانی رمز و گردش‌کارهای مبتنی بر ایمیل. این راهنما روی الگوهای ادغام برای ابزارهای تست رایج تمرکز دارد.

برای مرجع خام endpointها (شکل درخواست/پاسخ) به صفحه API یا docs.mail.td مراجعه کنید.

Selenium / Playwright / Cypress

الگو: قبل از هر تست یک صندوق تازه بسازید، اپ‌تان را با آن آدرس ثبت‌نام کنید، سپس API را برای ایمیل تأیید polling کنید.

// شبه‌کد — با هر فریم‌ورک تست تطبیق پیدا می‌کند
async function signUpFlow(page) {
  // ۱. ساخت صندوق موقت
  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());

  // ۲. اپ‌تان را با mailbox.address ثبت‌نام کنید
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // ۳. polling برای ایمیل تأیید (تا ۳۰ ثانیه)
  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 را به‌عنوان CI secret ذخیره کنید (در صورت نشت از داشبورد بچرخانید)
  • هر job تست صندوق خودش را می‌سازد — جلوی شرایط race بین jobهای موازی را می‌گیرد
  • برای هر تست آدرس یکتا (مثلاً test-${RUN_ID}-${TEST_ID}@mail.td) استفاده کنید تا اشکال‌زدایی شکست‌ها ساده شود
  • نیازی به پاک‌سازی نیست — صندوق‌ها خودکار منقضی می‌شوند، اسکریپت پاک‌سازی لازم نیست

Webhookها برای خطوط لوله سریع‌تر (Pro)

Polling به هر تست تأخیر می‌افزاید. برای مجموعه‌های تست بلند، یک URL webhook ثبت کنید که هنگام ورود ایمیل جدید POST دریافت کند. تست به‌جای ۳۰ بار polling منتظر تحویل webhook می‌ماند. زمان انتظار معمول ۵–۱۵ ثانیه را به کمتر از ۱ ثانیه می‌رساند.

webhookها با HMAC-SHA256 امضا می‌شوند — قبل از پردازش، هدر امضا را راستی‌آزمایی کنید.

نصب SDK

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

برای مرجع کامل endpointها به mail.td/api مراجعه کنید.

سوالات متداول

توکن API را از کجا بگیرم؟

داشبورد Pro → API Tokens → Create. توکن‌ها با پیشوند `td_` هستند و فقط یک‌بار هنگام ساخت نمایش داده می‌شوند — کپی کنید و در CI secrets یا مدیر رمز خود ذخیره کنید.

نرخ محدود چقدر است؟

Free یک درخواست در ثانیه، Pro ۱۰ درخواست در ثانیه. در صورت رسیدن به سقف، API کد ۴۲۹ با هدر `Retry-After` برمی‌گرداند.

امضای webhook چگونه کار می‌کند؟

هر POST webhook یک هدر امضا دارد که از webhook secret شما مشتق شده. قبل از پردازش payload امضا را راستی‌آزمایی کنید تا مطمئن شوید درخواست از Mail.td آمده و دست نخورده.

می‌توانم تست‌های سرتاسری را موازی اجرا کنم؟

بله — برای جلوگیری از race به هر job موازی صندوق خودش را بدهید. سهمیه ۱۰۰٬۰۰۰ عملیات در ماه Pro بیشتر موارد CI را پوشش می‌دهد.

API برای حساب Free هم کار می‌کند؟

Free شامل ۵۰۰ عملیات API در ماه است — مناسب اسکریپت‌نویسی سبک. برای CI/CD یا توان عملیاتی بیشتر به Pro ارتقا دهید: ۱۰۰٬۰۰۰ عملیات در ماه و نرخ درخواست بالاتر.