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-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 [email protected] 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

A TypeScript client first, then the rest.

/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.
Full-text search

Forgiving words and operators like from: and has:, 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. On an OpenEmail mailbox incoming files sit in object storage, one object each, and opening a thread pulls every one of them.

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.

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.

POSThooks.acme.dev/mail200
typeemail.received
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.

awaitopenemail.emails.send({
})
idmsg_3e91c7
queuedsentdelivered
email.openedemail.clicked

Your inbox,
on your own terms.

Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.

OpenEmail

Email infrastructure for businesses, AI, agents and personal email. Built for scale, privacy and control. Everything email should have had from day one.

© 2026 OpenEmail. All rights reserved.