Temp Mail을 테스트와 CI에 통합하기

Mail.td REST API는 종단 간 테스트용으로 설계되었습니다 — 가입, 비밀번호 재설정, 메일 트리거 워크플로가 올바르게 동작하는지 검증. 이 가이드는 일반적인 테스트 도구의 통합 패턴에 집중합니다.

원본 엔드포인트 참조(요청/응답 형식)는 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)로 실패 디버깅 용이
  • 정리 불필요 — 메일함은 자동 만료, 정리 스크립트 없음

더 빠른 파이프라인을 위한 Webhook (Pro)

폴링은 각 테스트에 지연을 추가합니다. 긴 테스트 스위트는 새 메일이 도착할 때 POST를 받는 webhook URL을 등록하세요. 테스트는 30번 폴링하는 대신 webhook 전달을 기다립니다. 일반적인 5–15초 대기를 1초 미만으로 줄입니다.

Webhook은 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는 초당 1회 요청, Pro는 초당 10회. 한도에 도달하면 API는 429와 `Retry-After` 헤더를 반환합니다.

Webhook 서명은 어떻게 동작하나?

각 webhook POST에는 webhook 시크릿에서 파생된 서명 헤더가 포함됩니다. 페이로드 처리 전에 서명을 검증해 요청이 Mail.td에서 왔으며 변조되지 않았음을 확인하세요.

종단 간 테스트를 병렬로 실행할 수 있나?

예 — 경쟁 조건을 피하려면 각 병렬 테스트 작업에 자기 메일함을 주세요. Pro의 월 100,000 ops 쿼터는 대부분의 CI 사례를 커버합니다.

API는 Free 계정에서도 동작하나?

Free는 월 500회 API 호출을 포함 — 가벼운 스크립팅에 적합. CI/CD나 더 높은 처리량이 필요하면 Pro로 업그레이드: 월 100,000 ops와 더 높은 요청 속도.