Native email debugging for Mac

See the email before your users do.

Point your app at MailScope and every development email lands on your Mac, checked for mistakes the moment it arrives.

For macOS 14 or later. Runs on your Mac, no account required.

A welcome email sent with {{first_name}} still in it. MailScope flagged it as it arrived.

A closer look at MailScope

Mistakes it flags on arrival

MailScope checks every captured email on your Mac, without AI or network requests. The inbox shows how many findings each message has, and the Checks column explains each one, most serious first.

Problems

Things a recipient would notice.

  • Unrendered template variablePlaceholders like {{first_name}} left in the email.
  • Missing embedded imageA cid: image with no matching attachment.
  • Empty link or image URLAn href or src with nothing in it.
  • Image has no sourceAn img without src or srcset.

Warnings

Likely to cause trouble somewhere.

  • Missing subjectThe message was sent without one.
  • Missing plain-text alternativeHTML only, with no text/plain part.
  • Uncheckable URLRelative links, or URLs with embedded credentials.

Suggestions

Worth fixing before launch.

  • Image has no alt attributeAdd alt text, or alt="" for decorative images.

Links and images, when you ask

Choose which URLs to test and MailScope checks that they respond. It sends HEAD requests without cookies or credentials and reports redirects without following them, so nothing is fetched until you select it.

Point your app here

MailScope runs an SMTP server on your Mac. Use it in place of your development mail settings.

  1. Open MailScope. The inbox shows when SMTP is running.
  2. Copy the settings for your setup into your app.
  3. Send a test email as usual. It appears in MailScope and goes nowhere else.

This Mac

Host  127.0.0.1
Port  1025
Auth  none
TLS   off

Works with Node, Rails, Django, Laravel and anything else that sends over SMTP. If you change the port in MailScope, use that port here too.

Docker

Host  host.docker.internal
Port  1025
Auth  none
TLS   off

First turn on Allow Docker connections in MailScope’s SMTP settings. No port publishing is needed. Other devices on your network can then reach the capture server too, so use it on a trusted network and turn it off when you’re done.

Laravel

MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_SCHEME=null

Paste into your development .env, run php artisan config:clear, and restart any queue workers. MailScope’s Copy Laravel .env button fills in your current port, with a Docker version too.

The same welcome email in MailScope's Preview at Mobile, 390 px. The heading wraps to two lines, and the Light and Dark preview switch sits at the top right.

Every width, light and dark

Each size changes the real WebKit viewport, so your media queries respond the way they would on a phone.

Desktop
Fits the window
Mobile
390 px
Tablet
768 px
Light or dark
Remembered between launches

These are viewport previews, not simulations of Gmail, Outlook or a phone’s mail app.

Let your coding assistant read the inbox

Turn on MailScope’s MCP server and assistants like Claude Code can wait for the email your code just sent, read it, and run the same local checks.

  • Read-only. Assistants can list, wait for and read captured email. They can’t send or delete.
  • Only on this Mac. The server listens on 127.0.0.1 and needs an access token.
  • Off until you turn it on. Copy the configuration from Settings when you want it.
You

Sign up a test user and check the welcome email.

get_smtp_statusrunning on 127.0.0.1:1025
wait_for_emailrecipient “maya@studio.test”Welcome to Fieldnotes, {{first_name}}
run_local_checks3 findingsPossible unrendered template variable
Assistant

The welcome email still says {{first_name}} in the subject and heading. The signup handler isn’t passing the user’s name to the template. I’ll fix that and send it again.

Safe with real-looking test data

Never relayed

Captured email stays in MailScope. Nothing is forwarded to real recipients.

Remote content blocked

Images, fonts and tracking pixels load only when you choose. Scripts never run in previews.

Links checked on request

No URL is contacted until you select it, and checks send no cookies or credentials.

Risky attachments flagged

Executables and installers are blocked. Files that can run code ask before opening.

Questions

When can I download MailScope?

The Mac preview is coming soon. There’s no public download yet. MailScope needs macOS 14 or later and runs on Apple silicon and Intel Macs.

Does it show how Gmail or Outlook will render my email?

No. Previews use WebKit at real viewport widths. They don’t simulate any particular email client. Use MailScope to catch content and template mistakes early, and a client-testing service when you need exact rendering.

Do the checks guarantee my email will be delivered?

No. Local checks look for common content mistakes. They don’t validate every HTML rule or predict spam filtering or deliverability.

Does it need an account or an internet connection?

No. Capture, preview and local checks work offline without an account. The network is only used when you choose to check links or load remote content.

What if port 1025 is already in use?

MailScope tells you and offers a nearby free port in one click. Change the port in your app to match, or use the copy buttons, which always include the current port.

Which MCP clients work with it?

Any client that supports Streamable HTTP and a custom Authorization header. Choose Copy MCP Configuration in Settings and add it to your assistant. The tools are get_smtp_status, list_emails, wait_for_email, get_email and run_local_checks.