Postfix SMTP relay on Alpine for outgoing mail from containers - amd64 and arm64, rebuilt weekly
10K+
This Docker image is managed and kept up to date by epicsoft LLC.
Postfix as an SMTP relay (smarthost) on the official Alpine image: containers hand their mail to it, and it delivers the mail to your mail server with authentication and TLS.
linux/amd64 and linux/arm64This image can be used as
Released through a git tag X.Y.Z, which publishes X.Y.Z, X.Y and X and moves latest. Changes and the
contained versions are listed in the changelog.
| Tag | Content |
|---|---|
1.0.0 | exactly this build - use this in production |
1.0, 1 | newest release of that line |
latest | the master branch, rebuilt weekly on alpine:latest, also moved by every release |
develop | current state of the develop branch, GitLab registry only, not for production |
1.0.0 contains Postfix 3.11.7, OpenSSL 3.5.9 and Alpine 3.24.2.
SMARTHOST_HOST The remote SMTP server address requiredSMARTHOST_PORT The remote SMTP server port (default: 587)SMARTHOST_USER The username to authenticate with the remote SMTP server requiredSMARTHOST_PASSWORD The password to authenticate with the remote SMTP server requiredSMARTHOST_DOMAIN The domain to append to mails requiredSMARTHOST_TLS_SECURITY_LEVEL Configuring TLS support (default may)SMARTHOST_NETWORKS The list of trusted remote SMTP clients, comma separated without spaces (default: 192.168.0.0/16,172.16.0.0/12)SMARTHOST_ADD_MISSING_HEADERS Add headers when not present (default: true)SMARTHOST_FORCE_FROM Replaces the from address with the specified one (default: empty)From: header only, not the envelope sender$ in the value is taken literally, no escaping neededSMARTHOST_INIT_ALIAS_DATABASE Initialize the alias database (default: true)TZ Defines the time zone for the Docker container (default: unset)SMARTHOST_TLS_SECURITY_LEVEL - possible values:
none - No TLSmay - Opportunistic TLSencrypt - Mandatory TLS encryptiondane - Opportunistic DANE TLSdane-only - Mandatory DANE TLSfingerprint - Certificate fingerprint verificationverify - Mandatory server certificate verificationsecure - Secure-channel TLSEvery variable listed with a default must not be set to an empty value - the container
refuses to start. On port 465 (implicit TLS) SMARTHOST_TLS_SECURITY_LEVEL is ignored:
the connection is always wrapped in TLS and the level is forced to encrypt.
The container validates its configuration before starting Postfix and exits with a distinct code per missing variable:
| Code | Variable |
|---|---|
101 | SMARTHOST_HOST |
102 | SMARTHOST_PORT |
103 | SMARTHOST_USER |
104 | SMARTHOST_PASSWORD |
105 | SMARTHOST_TLS_SECURITY_LEVEL |
106 | SMARTHOST_NETWORKS |
107 | SMARTHOST_DOMAIN |
108 | SMARTHOST_ADD_MISSING_HEADERS |
109 | any of the above, or SMARTHOST_FORCE_FROM, given as more than one line |
No value may span more than one line. A second line would become a further entry in the generated Postfix map - another set of relay credentials, or another header rewrite rule.
docker run --rm -it \
--name smarthost \
-e SMARTHOST_HOST=mail.your-business.ge \
-e SMARTHOST_PORT=465 \
-e [email protected] \
-e SMARTHOST_PASSWORD=mySecretPassword \
-e SMARTHOST_DOMAIN=your-business.ge \
-e SMARTHOST_FORCE_FROM="Your Business LLC <[email protected]>" \
-e SMARTHOST_ADD_MISSING_HEADERS="true" \
epicsoft/smarthost:1.0
Issues are welcome on GitLab and GitHub. Please report a security problem as a confidential issue on GitLab instead of a public one.
MIT — Copyright (c) 2022-2026 epicsoft LLC / Alexander Schwarz
The MIT license applies only to files created by epicsoft LLC. Third-party software in the image — Postfix, the Alpine
packages and the official alpine image — remains under its own licenses.
Content type
Image
Digest
sha256:9e20a27bb…
Size
12.3 MB
Last updated
1 day ago
docker pull epicsoft/smarthost