Delivery Checks
HTML preview, text, headers, raw source. Plus SPF/DKIM/DMARC results via API.
stmp / Email testing, opened up
Give every test run its own inbox. Inspect real emails, retrieve sign-in codes, and check the details through the UI or REST API. Send freely within the sandbox.
TO: YOUR NEXT TEST RUN
Signed, sealed.
Tested before delivery.
01 / Open the envelope
HTML preview, text, headers, raw source. Plus SPF/DKIM/DMARC results via API.
Send with standard SMTP. Read the result through the API and make it part of your CI checks.
SPF/DKIM/DMARC results, Message-ID, size, and Authentication-Results checks. Grouped by severity.
02 / Your first test
Your app sends over SMTP. Your test reads the result over the API. The whole loop fits on one screen.
# create an inbox
export SMTPDEV_API_KEY="token-from-/tokens"
curl -X POST https://stmp.ink/api/accounts \
-H "X-API-KEY: $SMTPDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"address": "qa@example.test", "password": "use-a-secret"}'
# your app sends to it, then read what arrived
curl "https://stmp.ink/api/accounts/1/mailboxes/1/messages" \
-H "X-API-KEY: $SMTPDEV_API_KEY"
# 1. Register in the browser, then sign in:
# https://stmp.ink/register
# 2. Create a token from the web session.
curl -X POST https://stmp.ink/api/tokens \
-H "Content-Type: application/json" \
-d '{"name":"quickstart"}'
export SMTPDEV_API_KEY="paste-token"
# 3. Add a domain and create an account.
curl -X POST https://stmp.ink/api/domains \
-H "X-API-KEY: $SMTPDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"example.test"}'
curl -X POST https://stmp.ink/api/accounts \
-H "X-API-KEY: $SMTPDEV_API_KEY" \
-H "Content-Type: application/json" \
-d '{"address":"qa@example.test","password":"account-password"}'
# 4. Send through SMTP.
printf "Subject: Hello\nFrom: app@example.test\nTo: qa@example.test\n\nIt works." | \
nc stmp.ink 25
# 5. List messages from the Inbox mailbox.
curl "https://stmp.ink/api/accounts/1/mailboxes/1/messages?page=1&limit=25" \
-H "X-API-KEY: $SMTPDEV_API_KEY"
import os
import requests
import smtplib
from email.message import EmailMessage
base = "https://stmp.ink/api"
token = os.environ["SMTPDEV_API_KEY"]
headers = {"X-API-KEY": token}
requests.post(
f"{base}/domains",
headers={**headers, "Content-Type": "application/json"},
json={"domain": "example.test"},
)
account = requests.post(
f"{base}/accounts",
headers={**headers, "Content-Type": "application/json"},
json={
"address": "qa@example.test",
"password": "account-password",
},
).json()
msg = EmailMessage()
msg["From"] = "app@example.test"
msg["To"] = account["address"]
msg["Subject"] = "Hello"
msg.set_content("It works.")
with smtplib.SMTP("stmp.ink", 25) as smtp:
smtp.send_message(msg)
mailboxes = requests.get(f"{base}/accounts/{account['id']}/mailboxes", headers=headers).json()
inbox = next(box for box in mailboxes["items"] if box["path"] == "INBOX")
messages = requests.get(
f"{base}/accounts/{account['id']}/mailboxes/{inbox['id']}/messages",
headers=headers,
params={"page": 1, "limit": 25},
).json()
03 / Put it through its paces
Send from the test suite, poll the API, assert on subject and body.
The Playwright test clicks the real reset link from the real email.
Agents and QA read one-time codes and sign-in links straight from the API.
A catch-all account hands every test run a fresh address on your domain.
The same message in Thunderbird and Apple Mail, over plain IMAP.
Agents read OTP codes and confirmation links from the API — without touching a real inbox.
04 / Built into stmp
Bring your own domains and subdomains. One MX record each.
Create an address per test run over the API. Delete it after.
No daily caps, no metering.
Receives real email from services that deliver to your MX. Sends only within the sandbox.
Checked on every inbound message. Results in the UI and the API.
Auto-deleted after 30 days by default; per-message expiry for anything shorter.
Domains, accounts, mailboxes, messages, tokens. OpenAPI spec included.
New messages pushed via SSE. No polling.
Wildcard accounts and plus-sign addressing. Capture everything or route by tag.
Your existing mail clients work out of the box. No vendor SDK, no lock-in.
05 / Connection desk
Point your app at these endpoints — they're the same in every environment you deploy to.
| Protocol | Host | Port | Security |
|---|---|---|---|
| SMTP in | stmp.ink | 25 | Local plain SMTP |
| REST API | https://stmp.ink | /api | X-API-KEY header |
Ready when you are
Works with your stack
Use the SMTP client you already have. Inspect messages in stmp, then turn what you find into repeatable API assertions.