Built on topSoon

Test your signup mail
on every CI run

Give each test run its own address and read the mail it receives.

signup-42@acme.com
signup-03@acme.com
Confirm your email264831
Test run3/3
signup-01@acme.com418204
signup-02@acme.com730915
signup-03@acme.com264831

Nothing creates the address first. Catch-all takes the mail and the test reads the code.

How it works

Running in three steps.

  1. 01

    Invent an address

    Use signup-42@yourdomain.com in the test. Nothing has to exist first.

  2. 02

    Wait for the mail

    Search for it, or take the webhook when it lands.

  3. 03

    Pull out the code

    Read the body and any file, then bin the thread.

What it runs on

The parts doing the work.

Nothing here is a separate product. Each one is a piece of the mailbox you already have.

Catch-all addresses

Every address on the domain receives, including ones that have never been created. One switch closes it.

hello@yourdomain.comdelivered
billing@yourdomain.comdelivered
careers@yourdomain.comdelivered
anything-at-all@yourdomain.comdelivered
oct-2026-signup@yourdomain.comdelivered
REST API

A documented HTTP API with issuable, scopable, revocable keys.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Typed SDKs

TypeScript, Python, Ruby, PHP, Go, Java and C# clients, one method for every operation.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Webhooks

Tell your endpoint when mail arrives, instead of making you poll.

/threads?query=invoice
{ "threads": 12 }
Same mailbox, whether a person or a program is holding it.
Search by words or meaning

Forgiving words, operators like from: and has:, and search by meaning, inside the folder you are reading.

invoice from stripe
Stripe · Invoice #4021
Stripe · Receipt for Aug
Attachments

Pick them with the paperclip or paste them in. A pasted image lands in the body rather than the file list, and a file dragged onto the composer is not attached at all. In a mailbox hosted on Nextmail, incoming files sit in object storage, one object each, and a file is fetched only when you open or download it.

contract_v3.pdf2.4 MB
brand-kit.zip18 MB
Temporary addresses

A free inbox that takes real mail for an hour, then closes, so a signup cannot follow you.

trial-signup@example.com60 min

extend it an hour at a time, up to a day

Nearby

Other jobs for the same inbox.

Email into your app

Mail arriving at your domain reaches your server as a signed webhook, seconds later.

billing@in.yourapp.comArrived
POSThooks.acme.dev/mail200
typeemail.received
tobilling@in.yourapp.com
An address per customer

Give every ticket, record or customer its own address, with nothing to create.

Ticket 8123ticket-8123@in.yourapp.com
Ticket 8124ticket-8124@in.yourapp.com
Toticket-8123@in.yourapp.com
Fromticket-8123@in.yourapp.comSame address
Email inside your product

Send, read and organise mail from your own code with a typed client.

awaitnextmail.emails.send({
from:'receipts@acme.com',
})
idmsg_3e91c7
queuedsentdelivered
email.openedemail.clicked