A throwaway SMTP server
for the email you're not ready to send.
Sign up, get SMTP credentials, point your app at them.
Every email it would have sent shows up in a developer-grade inbox — never in a real mailbox.
Three steps. No configuration.
Sign up
Create an account and generate named SMTP credentials — one per environment, per service, per branch.
Point your app
Drop the host, port, username and password into your mailer config. Port 465 for implicit TLS, or 587 for STARTTLS — anything that speaks SMTP works.
Inspect
Every message your app tries to send lands in your inbox. Rendered HTML, plain text, or raw source.
Let the agent read the mail it just sent.
An agent can build and test a complete email workflow on its own — an invitation, a password reset, a signup confirmation, an order receipt. It wires up the mailer, triggers the send, and then waits — actually waits — for the message to arrive, reads it, and checks the link inside. The whole loop closes without a human opening a mail client.
discard.dev exposes your inbox as an MCP server, so Claude Code, Cursor and anything else that speaks MCP can use it directly. One command to connect it, and no SDK.
inbox_cursor → 2026-08-21T12:00:00Z (the agent triggers your reset endpoint) wait_for_message to=user@example.com → blocks, then returns the message get_message → subject, body, the reset link to check
It waits
No polling loop, no sleep 30 and hope. The call blocks until a
matching message is captured, then returns it.
Read-only
Search, read and wait. An agent cannot delete a message, mint credentials, or send anything at all.
Revocable
Its own API key, separate from your SMTP credentials. Revoke either one without disturbing the other.
Free forever, or $15 a month.
Free gives you 1 credential, 25 messages a day, 7 day retention and 10 MB per message — no card. Pro is $15 a month for unlimited credentials, 5,000 messages a day, 30 day retention, 25 MB per message and agent access over MCP.
Questions worth answering first.
Can a test email reach a real person?
No. The receiver accepts the message, stores it, and stops there — nothing is
ever forwarded to the address in the To: header. A seed script
aimed at production data cannot mail a real customer through it.
Which ports and which TLS?
Port 465 is implicit TLS, encrypted from the first byte. Port 587 is STARTTLS,
for clients that cannot do implicit TLS — .NET's own
System.Net.Mail.SmtpClient is one of them, since its
EnableSsl means STARTTLS. Either way, authentication is refused
until the session is encrypted.
Will it work with my mailer?
If it speaks SMTP, yes. Action Mailer, Django, Laravel, Nodemailer, Spring,
.NET, a cron job piping through curl — there is no SDK to install
and no code to change, only a host, a port, a username and a password.
Does it behave like a real SMTP server when things go wrong?
That is rather the point. Over quota, over the size limit or using a disabled
credential, it refuses with a real reply — 550 5.4.5 Daily message limit
of 25 reached for this account — so your error handling gets exercised
too, not just your happy path.
Can a coding agent use it?
Yes — the inbox is an MCP server, and connecting it is one
claude mcp add. The tool worth knowing about is
wait_for_message: it blocks until a matching message is captured
and then returns it, which is what lets an agent trigger a send and assert on
the result in one pass instead of polling. Every tool is read-only, and agent
access is a Pro feature.
How long are captured messages kept?
Seven days on the free plan, thirty on Pro. Each message can be read as
rendered HTML, as plain text, or downloaded as raw .eml for as
long as it is retained.
Why one credential per environment?
Because revoking is then a decision about one thing. Staging keeps sending while you disable the credential a misbehaving branch is using, and every message in the inbox says which credential delivered it.