Postal is an open-source email platform (built by Krystal) that provides SMTP sending, delivery tracking with web UI, webhook events, bounce processing, and multi-organization support. Deploy it on a VPS with 2GB+ RAM using Docker. Unlike Mailcow (full email server), Postal is focused on outbound sending with a tracking dashboard — think self-hosted Postmark. Cost: ~$5-10/month VPS vs $55-305/month for Postmark at equivalent volumes.
Postal Setup Guide: Open-Source Postmark Alternative
What Postal Does
Postal is like running your own Postmark. It provides:
- SMTP and HTTP API for sending email
- Web dashboard showing delivery status, opens, clicks, bounces
- Webhook events for bounce/complaint processing
- Multi-organization support (useful for agencies)
- Message retention for debugging delivery issues
- IP pool management for multiple sending IPs
It does NOT provide:
- Incoming email (IMAP/POP3) — use Mailcow for that
- Webmail — it's sending-only
- Marketing campaign management — use your ESP for that
- Template builder — bring your own HTML
Requirements
- VPS: 2GB+ RAM, 20GB+ disk (Hetzner CX21 recommended)
- OS: Ubuntu 22.04 or Debian 12
- Port 25 open (check with VPS provider)
- Domain with DNS access
- Docker and Docker Compose
Step 1: Install Postal
# Install Docker
curl -fsSL https://get.docker.com | sh
# Clone Postal
git clone https://github.com/postalserver/postal /opt/postal
cd /opt/postal
# Generate config
docker compose run postal initialize
Follow the initialization prompts. Postal creates its database and generates initial credentials.
# Start Postal
docker compose up -d
# Create admin user
docker compose run postal make-user
Access the web UI at https://postal.yourdomain.com.
Step 2: DNS Configuration
A Record
postal.yourdomain.com A YOUR_SERVER_IP
MX Record (for bounce processing)
postal.yourdomain.com MX 10 postal.yourdomain.com
SPF
yourdomain.com TXT v=spf1 ip4:YOUR_SERVER_IP -all
DKIM
Postal generates DKIM keys automatically. In the admin UI:
- Go to your organization → domain settings
- Copy the DKIM TXT record
- Add to DNS
DMARC
_dmarc.yourdomain.com TXT v=DMARC1; p=none; rua=mailto:[email protected]
PTR Record
Set reverse DNS on your VPS to postal.yourdomain.com.
Step 3: Create Sending Credentials
- In Postal UI → Create Organization → Create Server
- Generate SMTP credentials for the server
- Note: host, port, username, password
Step 4: Connect to Applications
GoHighLevel
GHL → Settings → Email Services → Add SMTP:
- Host:
postal.yourdomain.com - Port:
25or587 - Username: Postal SMTP credential
- Password: Postal SMTP password
n8n or Application Integration
Use Postal's HTTP API or SMTP to send from any application:
SMTP Host: postal.yourdomain.com
SMTP Port: 587
Auth: Yes (STARTTLS)
Postal vs Mailcow vs Postmark
| Feature | Postal | Mailcow | Postmark |
|---|---|---|---|
| Purpose | Outbound sending platform | Full email server | Managed transactional service |
| Tracking Dashboard | Yes (web UI) | Basic (logs) | Yes (web UI) |
| Webhooks | Yes | No | Yes |
| Incoming Mail | Bounce processing only | Full IMAP/POP3 | Inbound parsing |
| Multi-org Support | Yes | Yes (multi-domain) | Yes (servers) |
| IP Pool Management | Yes | Basic | Managed |
| Cost (100K/mo) | ~$10/mo (VPS) | ~$10/mo (VPS) | $105/mo |
| Setup Complexity | Medium | Medium | None (managed) |
| Maintenance | Your responsibility | Your responsibility | Managed |
When to Use Postal
Good fit:
- You need a sending platform with tracking, not a full email server
- You want webhook-based bounce/complaint processing
- You manage multiple organizations/clients (agency use)
- You want Postmark-like features without Postmark pricing
Bad fit:
- You need incoming email (use Mailcow instead)
- You don't want to manage servers (use Postmark/SendGrid)
- You need guaranteed uptime SLA (self-hosted = self-supported)
Practitioner note: Postal is the most underrated self-hosted email option. For agencies managing multiple client domains through GoHighLevel, Postal's multi-organization support maps perfectly — one Postal server, separate organizations per client, isolated tracking per client.
Practitioner note: Postal's webhook support is what makes it superior to raw Mailcow for application use. When an email bounces, Postal fires a webhook to your application. This enables automated bounce processing — essential for maintaining list hygiene at scale.
If you want Postal deployed and configured for your sending infrastructure, schedule a consultation — I set up self-hosted email platforms for businesses that want the cost savings with professional configuration.
Sources
- Postal: GitHub Repository
- Postal: Documentation
v1.0 · March 2026
Frequently Asked Questions
What's the difference between Postal and Mailcow?
Mailcow is a complete email server (send, receive, webmail, IMAP/POP3). Postal is an outbound email platform (send, track, webhooks). Use Mailcow if you need a full email server. Use Postal if you need an outbound sending platform with delivery tracking — like self-hosted Postmark or SendGrid.
Can Postal replace Postmark or SendGrid?
For sending capabilities, yes. Postal sends via SMTP/API, tracks delivery/bounces/opens/clicks, and provides webhooks. What it doesn't have: Postmark's managed reputation, SendGrid's marketing tools, or dedicated support. You manage the infrastructure.
How much does Postal cost to run?
The software is free and open-source. VPS hosting: $5-10/month (Hetzner CX21-CX31). At 100K emails/month, that's $5-10 vs Postmark's $105 or SendGrid's $90. Annual savings: $1,000-1,200.
Can I connect Postal to GoHighLevel?
Yes. Postal provides standard SMTP credentials. In GHL, add SMTP with your Postal server hostname, port 25 or 587, and the SMTP credentials from Postal's admin panel.
Is Postal maintained and stable?
Postal is maintained by Krystal (UK hosting company) and has an active GitHub repository. It's stable for production use. Updates are less frequent than commercial products but the software is mature.
Want this handled for you?
Free 30-minute strategy call. Walk away with a plan either way.