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
| Item | Value |
|---|---|
| Namespace | default |
| Image | axllent/mailpit:v1.31.0 (pinned, not latest) |
| Replicas | 1 |
| Ports | 8025 (web UI + API), 1025 (SMTP) |
| Resources | requests 20m/32Mi, limits 200m/128Mi |
| Storage | PVC mailpit-data, 1Gi, storageClassName: local-path → /data (SQLite message store) |
| Message cap | MP_MAX_MESSAGES=5000 |
| Reloader | reloader.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.