API-first · real-time · self-destructing

    Disposable inboxes, built for CI.

    One POST gives you prefix@devmailr.app. Email lands over WebSocket in under 500 ms, your tests assert on it, and the inbox deletes itself. Nothing to clean up. Ever.

    < 500ms deliveryHMAC-signed webhooksscoped dmk_ keys

    No credit card · Free tier forever · Inboxes self-destruct

    The problem

    Your inbox was never meant to be a test fixture.

    Every signup flow you test leaves a mess somewhere. Devmailr gives each test run its own address — and takes out the trash for you.

    Without devmailr

    • Personal inbox flooded with test emails
    • Shared team credentials for throwaway accounts
    • Manual cleanup after every test run
    • No API — email verification stays untestable
    zero cleanup

    With devmailr

    • One isolated inbox per project or test run
    • Expires on schedule — zero cleanup, ever
    • REST API + webhooks for full automation
    • Real-time WebSocket delivery, no polling lag

    Capabilities

    Everything a test inbox should have.Nothing it shouldn't.

    Real-time delivery

    < 500ms

    Email is pushed to your dashboard and your sockets the instant SES hands it over. No refresh button, no retry loops — your assertion runs before the spinner would have finished.

    email:receivedci-run-42@devmailr.app312ms

    email:receivedqa-env@devmailr.app288ms

    webhook:deliveredPOST https://hooks.yourapp.dev200 OK

    24h · 7d · ∞

    Auto-expiry

    Inboxes vanish on schedule — 24 hours on Free, 7 days on Indie, never on Pro. The cleanup script you keep meaning to write is now a product feature.

    dmk_…

    REST API, scoped keys

    Create inboxes, list emails, and fetch full content from any script. Keys are SHA-256 hashed and scoped to read, crud, or crud_webhooks.

    HMAC-SHA256

    HMAC-signed webhooks

    A signed POST hits your endpoint the moment an email arrives. Verify the signature, trust the payload, skip the polling loop.

    qa-env@devmailr.app

    Custom prefixes

    Name inboxes after the thing they test. Readable addresses beat random hashes in every CI log you will ever grep.

    Attachments included

    Pull invoices, exports, and generated PDFs straight from the API or dashboard on Indie and Pro.

    ≤ 10 MB / file

    Built for test automation

    The inbox does the parsing,so your tests don't.

    Every message is scanned the moment it arrives — codes, links, and auth verdicts come back as structured fields. Wait for mail instead of polling it, stream it without hosting a webhook, and filter it server-side.

    receive-time

    Codes & links, extracted

    Each email is scanned the moment it arrives. The verification code and the primary CTA link come back as fields — skip the body-parsing regex in your test.

    extractedCodes: ["492013"]
    long-poll

    Wait, don't poll

    Hold one request open until a matching email lands — up to 90s. Replaces thirty list-polls and the rate-limit cost that comes with them.

    GET /mailboxes/:id/wait?has_code=true
    deliverability

    SPF · DKIM · DMARC verdicts

    SES's auth verdicts ride along on every message, so you can assert your real send path passes — or catch why it landed in spam.

    verdicts: { spf: "PASS", dkim: "PASS" }
    advanced

    Your regex, server-side

    Pass your own pattern and get capture group one back in matches — for the one token the extractor can't guess. Runs in JS, ReDoS-guarded.

    ?match=tok_([a-z0-9]+)
    realtime

    Stream without a webhook

    Server-Sent Events push each email the instant it lands. Realtime mail from CI behind a NAT — no public endpoint to host or verify.

    GET /mailboxes/:id/stream
    query

    Search the whole inbox

    Filter server-side by sender, subject, body text, time window, unread, or whether a code was found. The body is searched even though the list omits it.

    ?q=invoice&since=2026-06-01

    The workflow

    From git push to asserted email in one pipeline.

    No browser automation, no IMAP credentials in your secrets store. Just HTTP.

    1. 01

      Create

      POST /mailboxes from your test setup. You get an address back in one round-trip.

    2. 02

      Trigger

      Run the suite. Your app sends its signup, reset, or invoice email to the new address.

    3. 03

      Assert

      expect() on subject, body, and links. The inbox expires on its own afterwards.

    email.spec.jsPASS
    1// email.spec.js — runs on every push2const res = await fetch('https://api.devmailr.app/api/mailboxes', {3  method: 'POST',4  headers: { Authorization: `Bearer ${process.env.DMK_KEY}` },5})6const { address } = await res.json()  // ci-a1b2c3@devmailr.app7 8await signUp({ email: address })9 10const email = await waitForEmail(address)  // ~300ms11expect(email.subject).toBe('Confirm your account')12expect(email.links[0]).toContain('/verify?token=')

    Pricing

    Start free. Upgrade when CI does.

    Three plans, no seats, no usage meters. The price on the card is the price on the invoice.

    MonthlyYearly (2 months free)

    Free

    €0/forever

    Kick the tires on a side project.

    • 1 mailbox
    • 24-hour expiry
    • Random prefix
    • Web dashboard
    Start free
    Most teams pick this

    Indie

    €5/per month

    Enough inboxes for a full test matrix.

    • 10 mailboxes
    • 7-day expiry
    • Custom prefixes
    • REST API + scoped keys
    • HMAC-signed webhooks
    • Attachments (up to 10 MB/file)
    Start Indie

    Pro

    €19.95/per month

    For agencies and teams running CI around the clock.

    • Unlimited mailboxes*
    • 30-day email retention
    • Custom prefixes
    • REST API + scoped keys
    • HMAC-signed webhooks
    • Attachments (up to 10 MB/file)
    • Higher rate limits
    • Priority support
    SoonCustom domains — receive at your own domain
    Start Pro

    *Fair use policy — generous soft cap, raised on request. See Terms.

    Prices in EUR · Cancel anytime · Free needs no credit card · Free & Indie inboxes expire; Pro keeps inboxes with 30-day email retention

    FAQ

    Questions, answered.

    Still unsure? The Free tier is the fastest answer — spin up an inbox and see for yourself.

    Catches email from anywhere in your stack

    GitHubVercelRailwayAWSStripeRenderCircleCIGitHub ActionsGitHubVercelRailwayAWSStripeRenderCircleCIGitHub Actions

    Developers

    Built for people who read CI logs for a living.

    uses: REST API
    We wire up a new Devmailr inbox in our Jest fixtures and never tear it down — the 7-day expiry does it for us. Cleanest email testing setup I have used.
    JK

    Jamie K.

    Backend Engineer · payments startup

    uses: webhooks
    The HMAC-signed webhooks are the killer feature. Our Slack bot posts the second a staging email lands — zero polling, and we can verify every payload.
    SR

    Sofia R.

    DevOps Engineer · e-commerce platform

    uses: custom prefixes
    Finally a Mailinator alternative with a proper REST API. Naming inboxes qa-checkout@ and qa-onboarding@ instead of random hashes pays for Indie by itself.
    MC

    Marcus C.

    Full-stack Developer · indie SaaS

    Your next test run is already waiting for an inbox.

    One request from now, you have prefix@devmailr.app catching email. It will be gone before your next standup.

    $curl -X POST https://api.devmailr.app/api/mailboxes
    Create a free inbox

    No credit card · First inbox in under a minute · Deletes itself when you're done