# Copy to .env next to docker-compose.yml and fill in. # Full reference: docs/guide.md "Environment variables". # Required — the container refuses to start without it. Hostname used both for # the panel's TLS vhost and for Postfix's SASL realm (SASL_REALM defaults to # this) and myhostname; must also match your PTR record. Must match the # certificate your reverse proxy obtains. Bare FQDN only — no scheme or port. SELFPOST_HOSTNAME=mail.example.com # Set to true to also enable RFC 6409 submission (587/STARTTLS) alongside the # primary 465/smtps listener. SUBMISSION_ENABLE=false # Level-1 backstop rate limit (anvil) — see docs/guide.md "Rate limiting". RATE_LIMIT_MESSAGES_PER_IP=100 RATE_LIMIT_WINDOW_SECONDS=3600 # Days of send-log history kept before the background sweep deletes rows. SEND_LOG_RETENTION_DAYS=90 # Sliding idle timeout for the panel login session, in days. No absolute cap: # an admin who keeps coming back stays signed in indefinitely. Polling by the # monitoring screens does not count as activity, only navigation/actions do. PANEL_SESSION_IDLE_DAYS=7 # Comma-separated resolvers the panel's deliverability checks (PTR, SPF, DKIM, # DMARC) query directly. They deliberately skip this host's own resolver: with # systemd-resolved the reverse lookup of the server's IP answers with the local # hostname instead of the PTR record published in public DNS, which made the # panel report a correct PTR as wrong. Leave unset for the public defaults # (1.1.1.1, 8.8.8.8, 9.9.9.9); set it if outbound port 53 is closed or you run # your own recursor, e.g. SELFPOST_DNS_RESOLVERS=10.0.0.2:53 # SELFPOST_DNS_RESOLVERS= # Comma-separated CIDRs (bare IPs allowed) of reverse proxies allowed to # supply X-Forwarded-For for login/setup rate-limiting. Leave unset unless # you know the exact address of your reverse proxy — trusting the wrong # source lets a client spoof its rate-limit key. Behind the default Apache # host-network setup this is typically the Docker bridge gateway, e.g. # TRUSTED_PROXY_CIDR=172.18.0.1