Docs · DevCatz

Mail

DevCatz catches every mail your sites send in a local inbox, so you can preview, check and forward it without ever reaching a real customer.

The Mail section in the rail is a mail catcher: a small SMTP server inside DevCatz that accepts every mail your sites send and keeps it on your computer. Nothing is delivered anywhere unless you press Forward… yourself. Password resets, order confirmations and newsletters land in one inbox where you can read, check and delete them. The catcher, its site tab and its settings are the same on macOS and Windows.

How the catcher works

Address 127.0.0.1, port 2525 (change it in Settings → Mail)
Authentication Any username and password is accepted. The username names the site, so the inbox can tell sites apart.
Encryption None: STARTTLS is refused. Point your mailer at plain SMTP.
Size limit 50 MB per mail
How much is kept 500 mails by default, and at most 200 MB; the oldest go first

The catcher listens on 127.0.0.1 only — nothing from outside your computer can reach it, and Windows Firewall has no reason to ask about it. It runs inside the app, so it stops when DevCatz quits. It starts with DevCatz unless you switch that off.

Point a site at the catcher

The quickest way is the site’s Mail tab → Write to .env (below). By hand, the lines look like this for Laravel:

MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=shop
MAIL_ENCRYPTION=null

MAIL_HOST can also be the web inbox name (mail.localhost with the default domain).

The inbox

Open Mail in the rail. The list shows every caught mail, newest first:

  • All sites filters the list to one site; Read / Unread marks mail, and the search box narrows the list.
  • Select mails to delete or mark several at once, or use Delete all (it asks first).
  • Mail with attachments is marked in the list; in an open mail, click an attachment to save it.

Reading a mail

A mail opens in four views:

View Shows
HTML The rendered mail, in a sandbox. Remote images are blocked until you press Load images.
Text The plain-text part
Headers Every header
Source The raw message

Desktop shows it full width; Mobile squeezes it to 375 px, like a phone.

Checks

Each mail gets a Checks line that points out common mistakes before your users find them:

  • no plain-text part
  • images without alt text
  • links that still point at a dev domain
  • a missing List-Unsubscribe, Message-ID or Date header
  • big attachments

Forward to a real inbox

Forward… sends the mail through your own SMTP account (set it up first in Settings → Mail, below). The original sender becomes Reply-To, so replies still go to the right place. Handy when a client wants to see the real thing in their own mail app.

The web inbox

The same inbox is served at https://mail.<tld> — https://mail.localhost by default. Open it from the Web inbox button. Shared through Expose, it works on a phone too, which is the easiest way to see how a mail looks on a real small screen.

The site’s Mail tab

A site gets a Mail tab when its .env has mailer keys. It shows:

  • whether the catcher is running (if it is stopped: start it on the Mail page, or let it start with DevCatz),
  • Write to .env, with the right lines for the site’s stack — Laravel MAIL_*, Django EMAIL_*, Flask MAIL_*, and SMTP_* for Nodemailer and Go — shown before anything is written,
  • Recent mail from this site, with Open Mail to jump to the inbox.

When .env has no mail settings yet, the tab says so and offers the lines to write.

Settings → Mail

Option What it does
SMTP port The catcher’s port, 2525 by default. The catcher restarts when it changes.
Web inbox domain The name of the web inbox, mail by default (mail.<tld>). The same name works as MAIL_HOST.
Mails kept How many mails to keep (500). The oldest are deleted beyond this, and beyond 200 MB.
Start the mail server when DevCatz launches Off means you start it by hand on the Mail page.
Notification when a mail arrives A macOSWindows notification per caught mail — site: subject, caught by DevCatz. Clicking it opens the inbox.
Send a test mail Drops a test mail into the inbox, to see that it works
Open data folder Opens ~/Library/Application Support/DevCatz/mail in Finder%APPDATA%\DevCatz\mail in File Explorer

Forwarding account

The account Forward… sends through:

Field Notes
SMTP host For example smtp.gmail.com
Port and Security STARTTLS (587), TLS (465) or None
Username and Password The password is encrypted with the macOS KeychainWindows’ protected storage (DPAPI), for your account only, never kept in plain text
Send as (From) An address the account may send from. The original sender becomes Reply-To.

Save keeps it; Remove forgets it.

In the menu bar

The DevCatz icon in the menu bar (the system tray on Windows) has a mail line — Mail · N new, N caught or Mail · catcher off — with Open Inbox and Start Mail Server / Stop Mail Server. See Monitoring and the menu bar.

Mail gateways

Need a real mail server — IMAP, inbound mail, an HTTP sending API? The Gateways section has Stalwart and Postal. Both deliver into this same catcher, so nothing leaves your computer there either.

Limits

  • No TLS: the catcher refuses STARTTLS, so a mailer that insists on encryption needs it switched off for local work.
  • 50 MB per mail; 500 mails and 200 MB in total by default.
  • The catcher lives inside DevCatz: when the app is not running, mail sent by a site fails to connect.

Last updated 2026-11-01