Reliable SMTP for modern workflows.

GopherPost is an auditable, queue-backed SMTP service written in Go. It ships with DKIM support, TLS, health checks, and a systemd installer so you can deliver mail from development to production with confidence.

Secure delivery pipeline

Supports TLS, DKIM signing, and per-recipient queueing with jittered retries and observability built in.

Operations ready

Health endpoints, metrics, audit streaming, and a systemd unit generator make deployment predictable.

Simple configuration

Toggle behaviour with environment variables and `.env` files—no database required.

Fast Go foundation

Built with Go 1.21+, leaning on the standard library so you get portability and performance.

Install in minutes

Build locally or run the guided installer for a hardened systemd deployment.

$ git clone https://github.com/Its-donkey/smtpserver.git
$ cd smtpserver
$ go build -o gopherpost ./...
$ ./gopherpost

Need systemd?

Run sudo ./install.sh to generate a tailored unit file, provision directories, and launch the service. The installer walks you through TLS, DKIM, and queue settings.

Observability baked in

Stream audit logs from /healthz, expose metrics via /metrics, and monitor queue depth with built-in counters.

Extensible by design

The codebase is organized by domain—delivery, queue, storage—making it easy to adapt to custom workflows or plug into your infrastructure.

Features

Everything you need to receive, inspect, and forward mail with confidence.

  • Implements core SMTP verbs with multi-recipient support, dot-stuffing handling, a 10 MiB message-size limit, and per-command deadlines.
  • Enforces host/IP allow-lists before sending the banner for reliable ingress control.
  • Persists accepted messages with per-recipient hashing so stored artefacts stay private yet reviewable.
  • Delivers outbound mail via MX resolution, randomized equal-priority retries, opportunistic STARTTLS, and jittered exponential backoff.
  • Scales with configurable concurrent delivery workers so the queue keeps up with bursty inbound traffic.
  • Supports DKIM signing when selector, key, and domain values are configured.
  • Provides observability through the health server, `/metrics`, and optional live audit streaming with runtime-configurable logging.
  • Configures entirely via environment variables (with `.env` support) for ports, banners, TLS/DKIM assets, and queue storage paths.

Contact

Questions, ideas, or need help adopting GopherPost? Reach out and we’ll be in touch.