Haɗa Temp Mail cikin gwaje-gwaje da CI

REST API ɗin Mail.td an tsara shi don gwajin end-to-end — tabbatar da cewa rajistar, sake saita kalmar sirri, da hanyoyin aiki da imel ke jawo suna aiki daidai. Wannan jagora yana mai da hankali kan salo na haɗawa don kayan aikin gwaji na yau da kullun.

Don ƙa'idar endpoint na asali (sifofin buƙata/amsa), duba shafin API ko docs.mail.td.

Selenium / Playwright / Cypress

Salo: ƙirƙiri sabon akwatin sakonni kafin kowane gwaji, yi rajistar app ɗinka tare da wannan adireshin, sannan ka yi polling na API don imel na tabbatarwa.

// pseudocode — yana dacewa da kowane fata na gwaji
async function signUpFlow(page) {
  // 1. Ƙirƙiri akwatin sakonni na ɗan lokaci
  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. Yi rajistar app ɗinka tare da mailbox.address
  await page.goto("/signup");
  await page.fill("[name=email]", mailbox.address);
  await page.click("button[type=submit]");

  // 3. Yi polling don imel na tabbatarwa (har zuwa 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) {
      // Amsar lissafin ba ta da jiki — samo bayanin saƙo don samun 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));
  }
}

Bututun CI/CD

Don GitHub Actions, GitLab CI, CircleCI, ko kowane bututun:

  • Adana token na API a matsayin sirri na CI (jujjuya daga dashboard idan ya zube)
  • Kowane aikin gwaji yana ƙirƙirar nasa akwatin sakonni — yana hana yanayin race tsakanin ayyukan layi ɗaya
  • Yi amfani da adireshi na musamman a kowane gwaji (misali test-${RUN_ID}-${TEST_ID}@mail.td) don sa debugging na rashin nasara ya zama mai sauƙi
  • Babu buƙatar tsabtacewa — akwatin sakonni suna ƙarewa atomatik, babu buƙatar rubutun tsabtace

Webhooks don bututu cikin sauri (Pro)

Polling yana ƙara latency ga kowane gwaji. Don dogon zaman gwaji, yi rajistar URL na webhook wanda zai karɓi POST lokacin da sabuwar imel ta zo. Gwajin ka yana jiran isar da webhook maimakon polling sau 30. Yana datsewa jira na yau da kullun na daƙiƙa 5–15 zuwa ƙasa da daƙiƙa 1.

Ana sa hannu Webhooks da HMAC-SHA256 — tabbatar da header na sa hannu kafin sarrafawa.

Saka SDK

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

Don cikakken ƙa'idar endpoint, duba mail.td/api.

Tambayoyin da ake yawan yi

Ina zan samu token na API?

Dashboard ɗin Pro → API Tokens → Create. Tokens suna da prefix `td_` kuma ana nuna su sau ɗaya kawai a lokacin halittarwa — kwafa kuma adana su a sirrin CI ko mai sarrafa kalmar sirri.

Mene ne iyakar adadin?

Free buƙata 1/daƙiƙa; Pro buƙatun 10/daƙiƙa. Idan ka kai iyaka, API yana mayar da 429 tare da header `Retry-After`.

Yaya sa hannu na webhook ke aiki?

Kowane POST na webhook ya haɗa da header na sa hannu wanda aka samo daga sirrin webhook ɗinka. Tabbatar da sa hannun kafin sarrafa payload don tabbatar da cewa buƙatar ta fito daga Mail.td kuma ba a canza ta ba.

Zan iya gudanar da gwaje-gwajen end-to-end a layi ɗaya?

Eh — don hana yanayin race, ba kowane aikin gwaji a layi ɗaya akwatin sakonni nasa. Kotar ayyuka 100,000/wata na Pro ya rufe yawancin lokuta na CI.

Shin API yana aiki ga asusun Free?

Free ya ƙunshi 500 ayyukan API kowane wata — ya dace don rubutun haske. Don CI/CD ko babban throughput, haɓaka zuwa Pro: 100,000 ops/wata da babban adadin buƙata.