Quick Answer

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

By Braedon·Mailflow Authority·Self-Hosted SMTP·Updated 2026-03-30

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:

  1. Go to your organization → domain settings
  2. Copy the DKIM TXT record
  3. 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

  1. In Postal UI → Create Organization → Create Server
  2. Generate SMTP credentials for the server
  3. Note: host, port, username, password

Step 4: Connect to Applications

GoHighLevel

GHL → Settings → Email Services → Add SMTP:

  • Host: postal.yourdomain.com
  • Port: 25 or 587
  • 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

FeaturePostalMailcowPostmark
PurposeOutbound sending platformFull email serverManaged transactional service
Tracking DashboardYes (web UI)Basic (logs)Yes (web UI)
WebhooksYesNoYes
Incoming MailBounce processing onlyFull IMAP/POP3Inbound parsing
Multi-org SupportYesYes (multi-domain)Yes (servers)
IP Pool ManagementYesBasicManaged
Cost (100K/mo)~$10/mo (VPS)~$10/mo (VPS)$105/mo
Setup ComplexityMediumMediumNone (managed)
MaintenanceYour responsibilityYour responsibilityManaged

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


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.