FutureMail
FutureMail for QA and testing

Real inboxes for end-to-end email tests

Your test signs up with a fresh address, waits for the email and reads the code or link. FutureMail extracts both for you, so a test step or a shell script gets the OTP in one call instead of a sleep and a regex.

Works with a domain you already own. One price for your whole team.

Addressesloopcart.dev
  • t

    test@loopcart.dev

    Base address: each run uses test+<run-id>@

  • s

    signup@loopcart.dev

    Target for new-account flow tests

  • r

    reset@loopcart.dev

    Password reset tests

  • m

    magic@loopcart.dev

    Magic-link sign-in tests

  • c

    ci@loopcart.dev

    Catch-all mailbox for anything else CI receives

Unlimited addresses, catch-all and plus-addressing included.

Why FutureMail works for QA and testing

A fresh address every run

Plus-addressing always works, so test+run-4821@ is a brand new address with no setup. Filter wait calls by that recipient and parallel jobs never read each other's mail.

No sleeps, no polling

GET /v1/emails/wait holds the request until a matching email arrives, for up to 5 minutes, and returns 204 on timeout so the test fails cleanly instead of hanging.

Codes and links already parsed

Every waited email comes back with extracted.otp and extracted.links, so asserting on a one-time code or following a magic link takes a single line.

One line in a CI job

Install the CLI with npm i -g futuremail, store FUTUREMAIL_API_KEY as a CI secret, and run CODE=$(fm wait --from yourapp.com --otp) in the step that needs the code.

Simulate bounces and complaints

Send to bounced@, complained@ or delayed@test.futuremail.dev, optionally with a +label, to check how your app handles failures. Test sends don't count toward your limits.

A catch-all for everything else

Set a catch-all on your test domain and any address your fixtures invent still lands in a mailbox you can inspect in the web inbox or over the API.

Agent-ready

A password reset test in CI

The test requests a reset for test+RUN_ID@ your domain, then calls wait_for_email filtered by recipient and a since timestamp. It opens the link from extracted.links, sets a new password and asserts that sign-in works. A coding agent in Cursor can run the same check over MCP while it builds the feature.

  • Confirm a signup OTP arrives and is accepted
  • Follow a magic link and assert the user is signed in
  • Check that your app handles a simulated hard bounce correctly
How agent inboxes work
# give an agent its own inbox and a key scoped to it
$ fm agents create "Test" \
    --address test@loopcart.dev
✓ Created agent Test
  address  test@loopcart.dev
  scopes   send, read

# connect Claude, Cursor or any MCP client
  url      https://api.futuremail.dev/mcp
  header   Authorization: Bearer fm_live_…

Set up in an afternoon

  1. 1

    Subscribe

    Create an account and start Pro for $20/month. Cancel anytime.

  2. 2

    Connect your domain

    Copy the DNS records we generate into your registrar. FutureMail checks them live and tells you when you're set.

  3. 3

    Create your addresses

    Add the addresses you need, point them at shared or individual mailboxes, and invite your team.

Pro

$20/ month

For your whole team. No per-seat fees, no overage charges.

Get started
  • 50,000 recipients a month
  • Unlimited custom domains
  • Unlimited addresses & aliases
  • Agent inboxes with scoped API keys
  • REST API, CLI & remote MCP server
  • Webhooks, templates & scheduled send
  • Open & click tracking
  • Team roles & audit log

Paid only, cancel anytime. New accounts can send to up to 1,000 recipients a day for their first 14 days; receiving is never limited. Pricing details

Common questions

How do I test OTP emails in CI?

Sign up with a unique plus-address on your FutureMail domain, then call GET /v1/emails/wait (or fm wait --otp) filtered to that address. The response includes extracted.otp, ready to type into the form.

Does my app have to send through FutureMail?

No. Your app can send with any provider; FutureMail only needs to receive at your test domain. If it does send through FutureMail, you also get delivery events and the simulated outcome addresses.

Do test emails count toward my monthly limit?

Sends to @test.futuremail.dev addresses don't, and neither does mail you receive. Email your app sends through FutureMail to a real address counts as normal sending.

Can parallel test jobs share one mailbox?

Yes. Give each job its own plus-address, such as test+job7@, and filter wait calls by recipient and a since timestamp so each job only sees its own email.

How much does FutureMail cost? Is there a free plan?

FutureMail is paid-only: Pro is $20/month and includes 50,000 recipients a month, unlimited domains and addresses, agent inboxes, the API and MCP server. There is no free tier or trial. Limits are hard caps, so there are never overage charges and no per-seat pricing. Charged in USD; Stripe may show your local currency and add applicable tax. Need more volume? Email support@futuremail.dev.

More answers in the general FAQ.

See all use cases

Your domain. Real email. For you and your agents.

Get started for $20/month