Skip to main content

Self-hosting a mailing list with listmonk

Run your own newsletter platform on a VPS, with proper authentication and pacing.

listmonk is a self-hosted newsletter and mailing-list manager: fast, single-binary, PostgreSQL-backed, and free under AGPL. · source code

What you need

  • A VPS (2 GB RAM is comfortable for small/medium lists).

  • PostgreSQL — listmonk's datastore.

  • A sending path. This is the part people underestimate: you need an SMTP relay or a properly configured mail server with correct PTR, SPF, DKIM and DMARC. See Email DNS.

Install (Docker, shortest path)

bash
mkdir -p /opt/listmonk && cd /opt/listmonk
# fetch the official compose file from the project, then:
docker compose up -d

Then open the web UI, create the admin user (do this immediately), and add your SMTP settings under Settings.

Configure sending

  1. Create a sending domain subdomain (e.g. mail.example.com) and authenticate it with SPF + DKIM.

  2. Publish a DMARC record. Start at p=none, tighten later.

  3. Set reverse DNS for the sending IP to match your mail hostname.

  4. Set conservative rate limits in listmonk so you do not blast your relay.

Lists, templates and campaigns

  • Lists are audiences; subscribers can belong to many.

  • Import via CSV, keeping only genuinely consented addresses.

  • Templates are Go templates with your branding.

  • Campaigns schedule a send to one or more lists.

  • Bounce handling must be configured — listmonk can process bounces via a webhook or mailbox, and you must prune them.

Keep it healthy

  • Honour unsubscribes instantly (listmonk does; verify your setup).

  • Watch bounce and complaint rates.

  • Warm up gradually on a new IP.

  • Send a test campaign to yourself and check headers at Gmail/Outlook before every big send.

Related reading