"use_case": "For test suites"

Email testing in your CI/CD pipeline

Sign-up codes, password resets, magic links and receipts, asserted on real email in every run. A unique inbox per test keeps parallel runs apart, and long-polling replaces sleep().

receiver.email/projects/signup-tests
Signup tests*-[email protected]
Emails
Your verification code[email protected]847291now
Welcome to Acme3 links2m
acme — zsh
~/acme❯npx vitest run signup
✓creates an account212ms
receives the OTP847291
2 passedin 1.4s

Who it's for

  • QA engineers automating sign-up, login and password reset flows
  • Teams running Playwright, Cypress, Jest, Vitest or pytest in CI
  • Developers who want to assert on transactional email before it ships
  • Anyone replacing a shared Gmail account and a regex

The job

Your app sends a real email. The test has to receive it, pull out the code or link, and carry on, in seconds, in parallel, without flaky sleeps or shared inboxes.

  1. 01Create a project. You get an address suffix and an API key for CI.
  2. 02Mint an address per test. inboxes.create() returns a unique address and its createdAt.
  3. 03Trigger the email. Sign up, reset a password or check out with that address.
  4. 04Wait and assert. waitForOtp() or waitFor() returns as soon as the email lands.

A sign-up test

Waiting from inbox.createdAt means a code from an earlier run can never satisfy this one.

import { ReceiverClient } from "@receiverdotemail/sdk";

const receiver = new ReceiverClient(); // reads RECEIVER_API_KEY

test("sign-up sends a working code", async () => {
  const inbox = await receiver.inboxes.create({ prefix: "signup" });
  await app.signUp(inbox.address);

  // Long-polls until the email lands (throws on timeout)
  const otp = await receiver.emails.waitForOtp({
    recipient: inbox.address,
    since: inbox.createdAt,
    timeout: 60,
  });

  await app.verify(otp.code); // "847291"
});

Fast

Mail is parsed and queryable in under two seconds. Long-polling returns the moment it lands.

Parallel-safe

Every prefix is an inbox, so each test, worker or branch gets its own address with no setup.

Any runner

GitHub Actions, GitLab CI, CircleCI, Jenkins: set RECEIVER_API_KEY as a secret and go.

Test your email flows in CI

Free tier included. No credit card required.

Start free