دمج Temp Mail في الاختبارات و CI

صُمّمت واجهة Mail.td REST لاختبارات end-to-end — التحقق من أن التسجيل وإعادة تعيين كلمة المرور وسير العمل المُفعَّل بالبريد تعمل بشكل صحيح. يركّز هذا الدليل على أنماط الدمج لأدوات الاختبار الشائعة.

للمرجع الخام لنقاط النهاية (أشكال الطلب/الاستجابة)، انظر صفحة API أو docs.mail.td.

Selenium / Playwright / Cypress

النمط: أنشئ صندوقاً جديداً قبل كل اختبار، سجِّل تطبيقك بهذا العنوان، ثم استطلع API لرسالة التحقق.

// شيفرة استرشادية — تتكيف مع أي إطار اختبار
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. استطلع لرسالة التحقق (حتى 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 كسرّ في CI (دوّره من اللوحة عند تسرّبه)
  • كل وظيفة اختبار تُنشئ صندوقها الخاص — يمنع تنازع التشغيل المتوازي
  • استخدم عنواناً فريداً لكل اختبار (مثل test-${RUN_ID}-${TEST_ID}@mail.td) لتسهيل تصحيح الأخطاء
  • لا حاجة إلى تنظيف — تنتهي الصناديق تلقائياً، لا حاجة لسكربت تنظيف

Webhooks لخطوط أسرع (Pro)

الاستطلاع يضيف زمناً إلى كل اختبار. لمجموعات الاختبار الطويلة، سجِّل عنوان webhook يستلم POST عند وصول بريد جديد. ينتظر اختبارك تسليم webhook بدلاً من 30 استطلاعاً. يقلّص انتظار 5–15 ثانية المعتاد إلى أقل من ثانية.

Webhooks موقَّعة بـ HMAC-SHA256 — تحقق من ترويسة التوقيع قبل المعالجة.

تثبيت SDK

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

للمرجع الكامل لنقاط النهاية، انظر mail.td/api.

الأسئلة الشائعة

من أين أحصل على رمز API؟

لوحة Pro → API Tokens → Create. الرموز ببادئة `td_` وتظهر مرة واحدة عند الإنشاء — انسخها واحفظها في أسرار CI أو مدير كلمات المرور.

ما حد المعدل؟

Free طلب واحد/ثانية، Pro 10 طلبات/ثانية. عند الوصول للحد، يُعيد API الرمز 429 مع ترويسة `Retry-After`.

كيف تعمل توقيعات webhook؟

يتضمن كل POST من webhook ترويسة توقيع مشتقة من سرّ webhook الخاص بك. تحقق من التوقيع قبل معالجة الحمولة للتأكد من أن الطلب جاء من Mail.td ولم يُعدَّل.

هل يمكنني تشغيل اختبارات end-to-end بالتوازي؟

نعم — أعطِ لكل وظيفة اختبار متوازية صندوقها الخاص لمنع التنازع. حصة Pro 100,000 عملية شهرياً تغطي معظم حالات CI.

هل تعمل API لحسابات Free؟

تتضمن Free 500 عملية API شهرياً — مناسبة للسكريبت الخفيف. لـ CI/CD أو أي شيء يحتاج إنتاجية أعلى ارتقِ إلى Pro: 100,000 عملية شهرياً ومعدل طلبات أعلى.