Postal
Complete mail delivery platform for outgoing email
Postal is a full-featured, self-hosted mail server designed for sending and receiving email for websites and applications. It is a self-hosted alternative to transactional email services.
Key features
- Transactional email sending
- Detailed delivery analytics
- HTTP API and webhooks
- Multi-organization support
Pros & cons
Strengths
- Great for application email
- Strong API
Trade-offs
- Multi-component deployment
- Needs careful IP reputation management
Postal replaces
Last reviewed Aug 26, 2026 · 931 words
Postal's software is about 20% of the job. The other 80% is the reputation of the IP address it sends from, and no amount of Docker skill changes that ratio. Run Postal on a residential connection and outbound port 25 is blocked before you start. Run it on a fresh VPS and most large providers block port 25 for new accounts too, and once unblocked, your IP starts with zero reputation and lands in spam at Gmail and Outlook until it earns better. The install genuinely takes an hour. Getting to reliable inbox delivery takes weeks, and that is the honest scope of this guide.
What Postal is: a sending platform, not a mailbox
Postal is a Ruby application, MIT-licensed, around 16,800 stars, built to do what SendGrid, Mailgun and Postmark do: accept mail from your applications over SMTP or an HTTP API, deliver it, track opens, clicks, bounces and complaints, and report it all through a web UI and webhooks. It also accepts inbound mail and routes it to your app or forwards it on. What it is not is a place people read email. There is no IMAP and no inbox; for that you want a full mail server such as Stalwart, and the email category separates the two kinds of product. Postal's multi-organisation model, with servers and credentials per org, makes it a good fit for an agency or a developer with several apps that all need to send.
The moving parts and the 2 GB they need
Postal 2 simplified things considerably: the old RabbitMQ dependency is gone, leaving a web process, an SMTP server, a worker and a cron container, plus MariaDB. The catalogue's 2 GB minimum is right for a quiet instance with the database alongside. The supported install uses the maintainer's helper script, which wraps Docker Compose:
git clone https://github.com/postalserver/install /opt/postal/install
sudo ln -s /opt/postal/install/bin/postal /usr/bin/postal
sudo postal bootstrap postal.example.com
sudo nano /opt/postal/config/postal.yml # database and hostname
sudo postal initialize
sudo postal make-user
sudo postal start
The docs put Caddy in front of the web UI for TLS, and Postal's SMTP listener sits on port 25 for inbound mail. Clients send through port 25 or 587 with credentials created per mail server in the UI, or through POST /api/v1/send/message with an X-Server-API-Key header, which is the route most applications should take.
The DNS checklist Postal will hold you to
Postal will not let you send from a domain until its records verify. Per sending domain you need an SPF record that includes Postal's SPF host, a DKIM key that Postal generates and shows you as a TXT record, and a DMARC policy. Postal also wants a return-path subdomain (by default psrp. under your domain) pointed at the Postal host so bounces come back to it, and a tracking domain if you enable click and open tracking. On the server side the non-negotiables are a PTR record on the sending IP that matches the hostname Postal announces, and a hostname whose forward lookup matches the PTR. Since early 2024, Gmail and Yahoo require SPF, DKIM and DMARC alignment from anyone sending in volume and a one-click unsubscribe header for bulk mail, so treat the whole list as mandatory rather than best practice.
Warm-up, bounces and the day Outlook blocks you
A new IP sending 5,000 messages on day one is a spam signal regardless of content. Warm up: tens of messages a day for the first week to engaged recipients, doubling weekly, and watch Postal's delivery stats for deferrals. Sign up for Google Postmaster Tools and Microsoft SNDS so you can see your reputation rather than guess it. Handle bounces automatically by consuming Postal's webhooks (MessageBounced, MessageDeliveryFailed and friends) and suppressing the addresses in your application; repeated sends to dead mailboxes are the fastest way to lose the reputation you built. Even done right, expect an occasional block from Microsoft that requires filing a delisting form, and read the honest self-hosted email piece before committing.
When a hosted relay is the smarter answer
If your total volume is a few thousand messages a month, Amazon SES costs about $0.10 per 1,000 and inherits Amazon's IP reputation; the self-hosted saving is under $1 a month and the cost is the operational work above. Postal makes sense at higher volume, when you need per-organisation tenancy, when the mail must not leave your infrastructure, or when the provider price per message starts hurting. It also makes sense as the API and analytics layer even if you eventually route delivery through a reputable upstream. Below that line, the practitioner's answer is a hosted relay and an afternoon back.
What I'd do
If you have a real need, a clean VPS with port 25 open and rDNS you control, run Postal 2 with the official installer, put Caddy in front, set every DNS record before the first test message, and warm the IP for a month while watching Postmaster Tools. Feed bounce webhooks into a suppression list from day one. If your volume is a hobby's worth, skip it, send through SES or a similar relay, and spend the time on the mailbox server instead, which is the part of self-hosted email that actually gives you something back.
Compare Postal
3 head-to-head comparisons.
Similar mail servers apps
listmonk
Mail ServersSelf-hosted newsletter and mailing list manager
Replaces Mailchimp, Sendinblue
Docker Mailserver
Mail ServersProduction-ready, config-driven mail server in a container
Replaces Google Workspace, Microsoft 365
Mailspring
Mail ServersCross-platform desktop email client
Replaces Outlook, Apple Mail
MailHog
Mail ServersEmail testing tool with a fake SMTP server
Replaces Mailtrap
Mail-in-a-Box
Mail ServersTurn a fresh server into a working mail server
Replaces Google Workspace, Microsoft 365
mailcow
Mail ServersDockerized full-stack mail server suite
Replaces Microsoft Exchange, Google Workspace