Using temporary email addresses to test a signup flow

· 7 min read

Anyone who has built a registration flow has hit the same wall: you need a fresh, working email address, and you need another one ten minutes later. Using your own address stops working almost immediately, because most systems enforce uniqueness and you cannot re-register.

The plus-addressing trick, and why it runs out

The standard first move is plus addressing. Mail to you+test1@gmail.com arrives at you@gmail.com, which gives you unlimited unique addresses at no cost. It is genuinely useful and worth knowing.

It fails in three common situations. Some signup forms reject + as invalid. Some applications normalise it away specifically to prevent this. And it only tests your provider — you learn nothing about how the mail renders elsewhere, and every test message lands in the inbox you actually use.

A disposable address avoids all three. As it happens, this service also folds +tag into the base inbox, so abc123+signup@fake-email.org and abc123+reset@fake-email.org both arrive in the abc123 inbox. You get tagged addresses without needing a separate inbox for each.

What disposable addresses are good for in testing

What they are not good for

Automated test suites. Do not point CI at a public disposable service. There is no API contract, no delivery guarantee, and no rate limit you are entitled to. Use a purpose-built mail sandbox — a local SMTP catcher in development, or a hosted testing service with a proper API — which gives you deterministic assertions and no external dependency.

Anything with a secret in it. The inbox is readable by anyone with the address. Never send a staging admin invitation or a production credential to one.

Testing deliverability or spam scoring. The result tells you nothing about how a major provider would treat the same message, because the filtering is completely different.

Long-lived test accounts. The inbox expires; a fixture account that needs a working reset path will break.

A workable approach

  1. Local development: a mail catcher that intercepts everything SMTP and shows it in a local UI. Nothing leaves the machine and there is no risk of mailing a real person.
  2. Automated tests: a testing-mail API with per-run inboxes, so assertions are deterministic.
  3. Manual and exploratory QA on staging: disposable addresses. Fast, disposable, and genuinely external.
  4. Pre-release rendering checks: a dedicated preview service that renders your template across many real clients.

Things worth testing that teams routinely skip

If your own service wants to block disposable addresses

A fair decision in some contexts, but be deliberate. Blocklists are always out of date, they reject legitimate users with privacy-conscious habits, and they are trivially bypassed by anyone determined. If the real goal is preventing trial abuse, a payment method or a phone check does far more. If the goal is deliverability, validating that the domain has an MX record does most of the work with far fewer false positives.

Grab an address from the inbox page and you can have a signup flow under test within a few seconds.

Related guides