Post

Mailpit

Mailpit

Mailpit

Purpose

Mailpit is an SMTP catch-all test server with a web UI, used to catch outbound mail from other homelab apps during dev/test instead of sending real email. Runs in the default namespace of the k3s cluster and is managed by ArgoCD.

Deployment

ItemValue
Namespacedefault
Imageaxllent/mailpit:v1.31.0 (pinned, not latest)
Replicas1
Ports8025 (web UI + API), 1025 (SMTP)
Resourcesrequests 20m/32Mi, limits 200m/128Mi
StoragePVC mailpit-data, 1Gi, storageClassName: local-path/data (SQLite message store)
Message capMP_MAX_MESSAGES=5000
Reloaderreloader.stakater.com/auto: "true"

MP_SMTP_AUTH_ACCEPT_ANY and MP_SMTP_AUTH_ALLOW_INSECURE are both enabled, so any workload on the cluster can relay mail through it without real credentials or TLS — fine for a catch-all test mailbox, not meant to be exposed beyond the LAN.

Networking

Service mailpit is a LoadBalancer (MetalLB-assigned IP) exposing both 8025 and 1025 — other workloads need to reach Mailpit’s SMTP port directly, not just the web UI, so ClusterIP + ingress alone wouldn’t be enough.

Traefik IngressRoute additionally fronts the web UI (port 8025 only) at:

  • mailpit.prod-k3s.iot-proxmox.net (middleware: default-headers)
  • www.mailpit.prod-k3s.iot-proxmox.net

TLS via the shared local-example-com-tls wildcard cert. SMTP traffic goes through the LoadBalancer IP directly, not through Traefik.

GitOps

Managed by ArgoCD (Application in argocd/apps/mailpit.yaml), watching the k3s branch of gitea.prod.iot-proxmox.net/bjones/mailpit with prune: true and selfHeal: true. The image is pinned to an explicit version so Renovate can open real version-bump PRs, which auto-merge and get picked up by ArgoCD’s self-heal — no manual step in between.

This post is licensed under CC BY 4.0 by the author.