discard.dev log in get credentials →
smtp.discard.dev:465/587 — accepting connections

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.

How it works

Three steps. No configuration.

01

Sign up

Create an account and generate named SMTP credentials — one per environment, per service, per branch.

02

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.

03

Inspect

Every message your app tries to send lands in your inbox. Rendered HTML, plain text, or raw source.

Agents · Pro

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.

Plans

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.

FAQ

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.