Temp Mail-কে টেস্ট ও CI-তে সংহত করা

Mail.td-এর REST API এন্ড-টু-এন্ড পরীক্ষার জন্য ডিজাইন করা — সাইনআপ, পাসওয়ার্ড রিসেট ও ইমেইল-ট্রিগার ওয়ার্কফ্লো সঠিকভাবে আচরণ করছে কিনা যাচাই। এই গাইড সাধারণ পরীক্ষার সরঞ্জামের জন্য ইন্টিগ্রেশন প্যাটার্নে কেন্দ্রীভূত।

কাঁচা endpoint রেফারেন্সের জন্য (request/response ফর্ম্যাট), 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. যাচাইকরণ ইমেইলের জন্য পোল (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) {
      // লিস্ট রেসপন্সে বডি নেই — 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 সিক্রেট হিসেবে সংরক্ষণ করুন (লিক হলে ড্যাশবোর্ড থেকে রোটেট করুন)
  • প্রতিটি টেস্ট জব নিজস্ব ইনবক্স তৈরি করে — সমান্তরাল জবগুলোর মধ্যে race condition প্রতিরোধ করে
  • প্রতি পরীক্ষায় অনন্য ঠিকানা ব্যবহার করুন (যেমন test-${RUN_ID}-${TEST_ID}@mail.td) যাতে ব্যর্থতা ডিবাগ করা সহজ হয়
  • কোনো পরিষ্কার করার দরকার নেই — ইনবক্স স্বয়ংক্রিয়ভাবে মেয়াদোত্তীর্ণ হয়, কোনো ক্লিনআপ স্ক্রিপ্টের প্রয়োজন নেই

দ্রুত পাইপলাইনের জন্য Webhooks (Pro)

পোলিং প্রতিটি পরীক্ষায় বিলম্ব যোগ করে। দীর্ঘ পরীক্ষা স্যুটের জন্য, একটি webhook URL নিবন্ধন করুন যা নতুন ইমেইল আসার সময় POST গ্রহণ করে। আপনার পরীক্ষা 30 বার পোলিংয়ের পরিবর্তে webhook ডেলিভারির জন্য অপেক্ষা করে। সাধারণ 5–15 সেকেন্ডের অপেক্ষাকে 1 সেকেন্ডের কম করে।

Webhooks 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 সিক্রেট বা পাসওয়ার্ড ম্যানেজারে সংরক্ষণ করুন।

রেট লিমিট কত?

Free প্রতি সেকেন্ডে 1 অনুরোধ; Pro প্রতি সেকেন্ডে 10 অনুরোধ। লিমিটে পৌঁছালে, API `Retry-After` হেডার সহ 429 রিটার্ন করে।

Webhook স্বাক্ষর কীভাবে কাজ করে?

প্রতিটি webhook POST আপনার webhook সিক্রেট থেকে উদ্ভূত একটি স্বাক্ষর হেডার অন্তর্ভুক্ত করে। অনুরোধ Mail.td থেকে এসেছে এবং পরিবর্তিত হয়নি নিশ্চিত করতে payload প্রক্রিয়াকরণের আগে স্বাক্ষর যাচাই করুন।

আমি কি এন্ড-টু-এন্ড পরীক্ষা সমান্তরালভাবে চালাতে পারি?

হ্যাঁ — race condition প্রতিরোধ করতে প্রতিটি সমান্তরাল টেস্ট জবকে নিজস্ব ইনবক্স দিন। Pro-এর 100,000 ops/মাস কোটা বেশিরভাগ CI ক্ষেত্র কভার করে।

API কি Free অ্যাকাউন্টের জন্য কাজ করে?

Free মাসিক 500 API অপারেশন অন্তর্ভুক্ত — হালকা স্ক্রিপ্টিংয়ের জন্য উপযুক্ত। CI/CD বা উচ্চতর থ্রুপুটের জন্য Pro-তে আপগ্রেড করুন: 100,000 ops/মাস ও উচ্চতর অনুরোধ হার।