Quick start

Goal: capture your first email and read every part of it. Three steps.

#1. Open the app

Double-click MailBox Ultra in /Applications (or hit Spotlight, type mailbox, press Return). The window appears, the SMTP server starts, and the toolbar shows the URL it bound:

text
SMTP  smtp://127.0.0.1:1025

If port 1025 is busy, MailBox Ultra walks forward to the next free port and the toolbar reflects whatever it actually got. Click the SMTP pill to copy it.

Need different defaults? Hit ⌘, to open Preferences and change the port, bind address, hostname, or anything else.

#2. Send a message

Use any SMTP client. The shortest one is swaks:

sh
swaks --to dev@example.com --from app@example.com \
  --server 127.0.0.1:1025 \
  --header "Subject: Hello from MailBox Ultra" \
  --body "It works."

Or with curl:

sh
curl --url smtp://127.0.0.1:1025 \
  --mail-from app@example.com \
  --mail-rcpt dev@example.com \
  --upload-file <(printf 'Subject: Hello\r\n\r\nIt works.\r\n')

#3. Inspect it

The new message lands in the inbox immediately. Click the row in the sidebar to open it; the detail pane on the right is six tabs deep:

Number keys 16 switch between the tabs. j / k (or / ) move between captured messages.

#Wire your real app to it

Most SMTP-aware libraries accept these standard env vars or config keys:

Library Setting
Laravel MAIL_* MAIL_HOST=127.0.0.1 MAIL_PORT=1025 MAIL_ENCRYPTION=null
Rails ActionMailer config.action_mailer.smtp_settings = { address: '127.0.0.1', port: 1025 }
Django EMAIL_HOST=127.0.0.1 EMAIL_PORT=1025 EMAIL_USE_TLS=False
Node nodemailer nodemailer.createTransport({ host: '127.0.0.1', port: 1025, secure: false })
Go gomail gomail.NewDialer("127.0.0.1", 1025, "", "")

If your app refuses to send without authentication, open Preferences (⌘,), tick Require AUTH under SMTP, set a user and password, click Apply. Match those credentials in the app.

#Useful keys

Keys Action
⌘, Open Preferences
? Show every keyboard shortcut
⇧⌘X Clear the inbox
⌘Q Quit

The full cheat-sheet lives behind ?.

#Next