Lightweight SMTP relay using msmtpd as a Docker image.
Tip
Want to be notified of new releases? Check out 🔔 Diun (Docker Image Update Notifier) project!
- Run as non-root user
- Latest msmtp/msmtpd release compiled from source
- Bind to unprivileged port
- Multi-platform image
git clone https://github.com/crazy-max/docker-msmtpd.git
cd docker-msmtpd
# Build image and output to docker (default)
docker buildx bake
# Build multi-platform image
docker buildx bake image-all
Registry | Image |
---|---|
Docker Hub | crazymax/msmtpd |
GitHub Container Registry | ghcr.io/crazy-max/msmtpd |
Following platforms for this image are available:
$ docker run --rm mplatform/mquery crazymax/msmtpd:latest
Image: crazymax/msmtpd:latest
* Manifest List: Yes
* Supported platforms:
- linux/amd64
- linux/arm/v6
- linux/arm/v7
- linux/arm64
- linux/386
- linux/ppc64le
- linux/s390x
TZ
: Timezone assigned to the container (defaultUTC
)PUID
: Daemon user id (default1500
)PGID
: Daemon group id (default1500
)MSMTP_USER
: Username to authenticate on the msmtp smtp. Also support file to fill value :MSMTP_USER_FILE
MSMTP_PASSWORD
: Password to authenticate on the msmtp smtp. Also support file to fill value :MSMTP_PASSWORD_FILE
Next variables are splitted by accounts following this template :
SMTP_<account>_<configuration>
default account is named default
, here are some env with the default account :
SMTP_DEFAULT_HOST
: SMTP relay server to send the mail to. requiredSMTP_DEFAULT_PORT
: Port that the SMTP relay server listens on. Default25
or465
if TLS.SMTP_DEFAULT_TLS
: Enable or disable TLS (also known as SSL) for secured connections (on
oroff
).SMTP_DEFAULT_TLS_STARTTLS
: Start TLS from within the session (on
, default), or tunnel the session through TLS (off
).SMTP_DEFAULT_TLS_CERTCHECK
: Enable or disable checks of the server certificate (on
oroff
). They are enabled by default.SMTP_DEFAULT_AUTH
: Enable or disable authentication and optionally choose a method to use. The argumenton
chooses a method automatically.SMTP_DEFAULT_USER
: Set the username for authentication. Authentication must be activated with theSMTP_AUTH
env var.SMTP_DEFAULT_PASSWORD
: Set the password for authentication. Authentication must be activated with theSMTP_AUTH
env var.SMTP_DEFAULT_DOMAIN
: Argument of theSMTP EHLO
command (defaultlocalhost
)SMTP_DEFAULT_FROM
: Set the envelope-from address. Supported substitution patterns can be found here.SMTP_DEFAULT_SET_FROM_HEADER
: When to set a From header. Can beauto
,on
oroff
(defaultauto
)SMTP_DEFAULT_SET_DATE_HEADER
: When to set a Date header. Can beauto
oroff
(defaultauto
)SMTP_DEFAULT_REMOVE_BCC_HEADERS
: Controls whether to remove Bcc headers. Can beon
oroff
(defaulton
)SMTP_DEFAULT_UNDISCLOSED_RECIPIENTS
: When set, the original To, Cc, and Bcc headers of the mail are removed and a single new header lineTo: undisclosed-recipients:;
is added. Can beon
oroff
(defaultoff
)SMTP_DEFAULT_DSN_NOTIFY
: Set the condition(s) under which the mail system should send DSN (Delivery Status Notification) messages as comma separated values. Available values areoff
,never
,failure
,delay
andsuccess
(defaultoff
)SMTP_DEFAULT_DSN_RETURN
: Controls how much of a mail should be returned in DSN (Delivery Status Notification) messages. Can beheaders
,full
oroff
(defaultoff
)
💡 All the available configurations are here : https://marlam.de/msmtp/msmtp.html
💡
SMTP_<account>_USER_FILE
andSMTP_<account>_PASSWORD_FILE
can be used to fill in the value from a file, especially for Docker's secrets feature.
You can also use inherit to extend an existing configuration :
SMTP_TEST2_INHERIT
: allow to inherit one or more configurations . Need to be a list of existing accounts, coma separated :DEFAULT, TEST, TEST1
2500
: SMTP relay port
You can add configuration by mapping a configuration file to /root/.msmtprc
You will always need to configure DEFAULT
account with environment variables
Docker compose is the recommended way to run this image. You can use the following docker compose template, then run the container:
docker compose up -d
docker compose logs -f
To install on a Kubernetes cluster, you can use the following kubernetes deployment template, then create the deployment:
kubectl apply -f deployment.yaml
You can also use the following minimal command:
$ docker run -d -p 2500:2500 --name msmtpd \
-e "SMTP_DEFAULT_HOST=smtp.example.com" \
crazymax/msmtpd
Recreate the container whenever I push an update:
docker compose pull
docker compose up -d
Want to contribute? Awesome! The most basic way to show your support is to star the project, or to raise issues. You can also support this project by becoming a sponsor on GitHub or by making a PayPal donation to ensure this journey continues indefinitely!
Thanks again for your support, it is much appreciated! 🙏
MIT. See LICENSE
for more details.