Email testing with people in it

Email that answers back

Point your app at simmail and write to people who behave like real ones: they read late, ignore you, click, junk you, bounce and reply. Nothing ever reaches a real inbox.

simmail · activity · acme-staginglive
  1. 09:02mail.delivered[email protected] → [email protected] “Your quote for the Harbor St. renovation”
  2. 09:02inspectspam score 2.4 / junk at 6 · 9 links, all reachable
  3. 11:47persona.receivedDana opens it on her phone busy · answers late and briefly
  4. 11:48link.senderlooks up acme.test — “looks legitimate, small team”
  5. 11:49link.openedopens /quotes/8812
  6. 11:52persona.sentreply → [email protected]
  7. Dana Okoro <[email protected]> · Re: Your quote for the Harbor St. renovation

    Thanks. Price is fine but we can't start the 14th — can you do the week after? Also does this include the permit?

    Sent from my phone

  8. 11:52persona.promised“I'll send the site photos Friday” will keep it: probably not
Why

Capturing mail is only half the test

Most email bugs show up after the send: in the replies, the bounces, the slow answers and the people who never answer.

Nobody replies in a sandbox

Threading, reply parsing, follow-up timers and "waiting on customer" states only get tested when someone answers. In simmail, someone does, in their own words and on their own schedule.

Real inboxes are messy

Greylisting, rate limits, full mailboxes, junk folders and out-of-office replies. Switch them on when you want them, and see what your queue does.

You can't test on customers

simmail has no route to the outside world. Use real-looking addresses, real templates and real sequences without the risk of mailing anyone.

The dashboard

Watch your app's email come to life

A live view of every inbox, every person and every decision they make, with the controls to steer it.

One email, start to finish, in real time: your app sends it, Marcus gets it, looks your company up, plans his reply for his working hours, and answers. Nothing here is staged.

simmail · activity · live

Tour the dashboard →

Inspect

See what the inbox will see

Every email your app sends gets a health report: a spam score with the rules behind it, every link and image checked, client compatibility and accessibility. People react to it, so mail that scores badly can land in their junk folder.

Inspect →

Parcelpoint · receipt health
The health report for a receipt: spam score 2.9 and the rules behind it
A receipt scores 2.9: an empty image part and an odd number of links.
Chaos

Break delivery on purpose

Turn on greylisting, rate limits, bounces and provider failures, for everyone or for one address. Find out whether your queue retries, backs off or quietly drops the email.

Chaos →

simmail · chaos
Chaos: fault rules for greylisting and a full mailbox
Greylisting for everyone, and a 552 Mailbox full one time in ten.
AI agents

A world for your agent to email

Building an agent that reads and writes email? Connect it over MCP. It gets people to write to, replies to handle and a health report for every draft, and you read every conversation afterwards. Nothing it sends reaches a real person.

AI agents (MCP) →

simmail · mail
A reply from a simulated homeowner in the Mail view
A reply an agent has to handle: Dana wants documents first.
Connect

Five minutes from sign-up to the first reply

Use your app's normal SMTP and IMAP settings, or the HTTP API and webhooks. In tests, the JavaScript and Python SDKs wait for the reply instead of sleeping.

</> For developers: send, then wait for the reply
# Your app's normal SMTP settings, pointed at simmail
curl --ssl-reqd --url smtp://c1.simmail.dev:2525 \
  --user '[email protected]:your-password' \
  --mail-from [email protected] \
  --mail-rcpt [email protected] \
  --upload-file hello.eml

Read the docs →

Safe by design

It can't email your real customers

  • No outbound delivery — simmail never delivers mail outside its own universes
  • Your universe, your data — kept for your plan's retention, then deleted
  • One sign-in — for the site, your account and every dashboard

Questions

Can simmail send email to a real person?

No. simmail has no way to deliver mail outside its own universes. Every address your app writes to is played by a simulated person or lands in a simulated mailbox, so you can test against realistic recipients without any risk of reaching a customer.

How is this different from a mail catcher?

A mail catcher stores what your app sends. simmail does that too, and then the recipients act: they read late, ignore, click links, look up your company, junk you, bounce, reply, and remember the conversation next time. Your app gets the replies, bounces and faults back, the way it would in production.

Do I need to change my code?

No. Point your SMTP and IMAP settings at your universe, or use the HTTP API. The quickstart takes about five minutes.

Who writes the replies?

An AI model plays each person, within the rules you set: their temperament, working or personal hours, time zone, what they want, what they remember and what they promised. Without AI, people still reply from templates.

Can I use it in CI?

Yes. Wait endpoints block until mail or a reply arrives, a simulated clock lets you skip ahead days in a second, and there are JavaScript and Python SDKs. See Testing & CI. There is a free plan, no card needed.

Put real behaviour between your app and its inbox

Start free with 25 AI actions a month, no card needed. Upgrade when you need more.