Test email verification & signup confirmation flows
The “confirm your email” step is easy to ship and easy to break: a token that expires too soon, a resend that mints a broken link, a stale link that should say “already verified” instead of throwing. Perenmail gives you a private inbox on a real domain — enter it at signup, watch the verification mail land live, open the confirm link in one tap, and retest every edge case against the same inbox because it doesn't disappear on you.
From signup to a verified account, in one place
- 01
Create a private inbox on a real domain
Spin up a registered-only address in one click. It lives on a real domain, so from your product's point of view it is an ordinary recipient — exactly what you want when you're testing the address you'll ask real users to confirm.
- 02
Enter it at signup
Paste the address into the sign-up form you're testing and submit. Your app fires its "confirm your email" message the same way it would for any new account — no special handling, no allowlist.
- 03
The verification mail lands live
A listening indicator and poll heartbeat surface the confirmation email at the top of the inbox the moment it arrives — no reload, unread state updating in place. You see the message the instant your app sends it.
- 04
One-tap open the confirm link
Every link in the message is extracted for you. Open the confirmation link in a single click and watch your account flip to verified — no hunting through the HTML for the right href or copy-pasting a long tokenized URL.
- 05
Retest resend, expired, and already-verified
Because the inbox is persistent by default it never expires on its own, so the earlier confirmation mail is still there. Hit resend and compare the new link against the old one, let a link expire and confirm the error path, or click a spent link to check the already-verified case.
Your app treats it like any real recipient
A signup-confirmation test is only worth anything if the address behaves like a real one. Perenmail inboxes live on real, registered domains, so your product's mail path is exercised end to end: address validation, the send from your transactional provider, DNS and delivery, and the inbound receipt. There is no special routing to configure and no catch-all sink to reason about — your app addresses it exactly as it would a customer.
Passes real address validation
Because the domain resolves and accepts mail, your signup form's email checks and any MX validation see a legitimate recipient — so you're testing the real path, not a shape your validator would reject in production.
One persistent inbox, every edge case
The inbox never expires on its own, so the original confirmation, the resent one, and the expired link all sit side by side. You retest the whole matrix against the same address instead of starting over each run.
If your confirm step verifies with a code rather than a link, the same inbox extracts it one-tap — that's the OTP and 2FA testing flow. And when a confirmation link never arrives, open the raw source and check the synthesized SPF, DKIM and DMARC results to see whether it's a delivery problem on your own outbound mail before you go digging in the app.
The parts that make verification testing quick
Live delivery
The confirmation email appears at the top of the inbox the instant it lands, with the unread count updating in place. You never refresh to check whether the mail went out.
One-tap link capture
Every link in a message is extracted automatically, so the confirmation URL is one click away. Verification codes are captured the same way for flows that confirm with a code instead.
Private, registered-only
Addresses are private and not publicly browsable. Only your signed-in account can read the inbox, so the confirmation links your product sends stay yours while you test.
Testing the rest of your account lifecycle too? The same private, persistent inbox covers password-reset flows — or read the FAQ for how the free and Personal+ plans differ.
Confirm your next signup the fast way.
Create a private inbox on a real domain, enter it at signup, and open the confirmation link in one tap. Free forever, no credit card.