---
title: "Email Testing for Developers - SMTP Labs, Inc."
canonical_url: "https://smtp.dev/"
last_updated: "2026-08-16T22:38:03.811Z"
meta:
  description: "Email testing for developers. SMTP in, IMAP/API out. Inspect headers, MIME, raw source. No servers to run."
  "og:description": "Email testing for developers. SMTP in, IMAP/API out. Inspect headers, MIME, raw source. No servers to run."
  "og:title": "Email Testing for Developers"
---

smtp.dev

# Email Testing for Developers

Test emails like you debug code. SMTP in, IMAP/API out. Inspect headers, MIME and raw source. Nothing leaves the sandbox.

[Get Started](https://smtp.dev/signup/) [Documentation](https://smtp.dev/docs/getting-started/)

## **SMTP, IMAP, POP3**

Your existing mail clients work out of the box. No vendor SDK, no lock-in.

- **Quick setup** Point an MX record and the domain receives real email from any service. No setup wizard, no 50-page guide.
- **REST API** Accounts, messages, domains, tokens. API-first.
- **Message inspection** Headers, MIME tree, raw RFC 5322. See exactly what arrived.

![SMTP, IMAP and POP3 protocol support](https://smtp.dev/protocols.jpeg)

## **After delivery**

Check what arrived in the UI or wire it into CI.

- **Delivery checks** HTML preview, text, headers, raw source. Plus SPF/DKIM/DMARC results via API.
- **CI-ready** Standard SMTP - any CI that sends email works. GitHub Actions, Jenkins, GitLab CI, whatever you use.
- **Deliverability audit** Sender config, HTML structure, links, and the content patterns spam filters flag. Grouped by severity.

![Email message preview with headers, HTML and raw source](https://smtp.dev/preview.jpeg)

**Quickstart**

## **Send, read, assert**

Your app sends over SMTP. Your test reads the result over the API. The whole loop fits on one screen.

[Read the CI guide](https://smtp.dev/docs/guides/ci/)

```
# create an inbox
curl -X POST https://api.smtp.dev/accounts \
  -H "X-API-KEY: $SMTP_DEV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"address": "qa@example.com", "password": "use-a-secret"}'

# your app sends to it, then read what arrived
curl "https://api.smtp.dev/accounts/$ACCOUNT/mailboxes/$INBOX/messages" \
  -H "X-API-KEY: $SMTP_DEV_API_KEY"
```

## **What you can test**

Each card links to a guide.

**CI assertions**

Send from the test suite, poll the API, assert on subject and body.

[CI assertions](https://smtp.dev/docs/guides/ci/)

**E2E flows**

The Playwright test clicks the real reset link from the real email.

[E2E flows](https://smtp.dev/docs/guides/e2e/)

**SPF, DKIM, DMARC**

Authentication verdicts from staging before you touch production DNS.

[SPF, DKIM, DMARC](https://smtp.dev/docs/guides/spf-dkim-dmarc/)

**QA signups**

A catch-all account hands every test run a fresh address on your domain.

[QA signups](https://smtp.dev/docs/guides/catch-all/)

**Client previews**

The same message in Thunderbird and Apple Mail, over plain IMAP.

[Client previews](https://smtp.dev/docs/guides/email-clients/)

**AI agents**

Agents read OTP codes and confirmation links over the API. In dev, not in your inbox.

[AI agents](https://smtp.dev/docs/guides/agents/)

## **Features**

**Custom Domains**

Bring your own domains and subdomains. One MX record each.

**Disposable Accounts**

Create an address per test run over the API. Delete it after.

**Unlimited Messages**

On every plan - no daily caps, no metering.

**Sandboxed**

Receives real email from any service. Sends only within the sandbox.

**SPF, DKIM, DMARC**

Checked on every inbound message. Results in the UI and the API.

**Retention Timers**

Messages kept for your plan's window, up to 90 days. Per-message expiry for shorter.

**REST API**

Domains, accounts, mailboxes, messages, tokens. OpenAPI spec included.

**Real-time Updates**

New messages pushed via SSE. No polling.

**Catch-All & Aliasing**

Wildcard accounts and plus-sign addressing. Capture everything or route by tag.

## **Start testing**

Sign up, add a domain, receive your first test email.

[Get Started](https://smtp.dev/signup/)