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_FILEMSMTP_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. Default25or465if TLS.SMTP_DEFAULT_TLS: Enable or disable TLS (also known as SSL) for secured connections (onoroff).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 (onoroff). They are enabled by default.SMTP_DEFAULT_AUTH: Enable or disable authentication and optionally choose a method to use. The argumentonchooses a method automatically.SMTP_DEFAULT_USER: Set the username for authentication. Authentication must be activated with theSMTP_AUTHenv var.SMTP_DEFAULT_PASSWORD: Set the password for authentication. Authentication must be activated with theSMTP_AUTHenv var.SMTP_DEFAULT_DOMAIN: Argument of theSMTP EHLOcommand (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,onoroff(defaultauto)SMTP_DEFAULT_SET_DATE_HEADER: When to set a Date header. Can beautooroff(defaultauto)SMTP_DEFAULT_REMOVE_BCC_HEADERS: Controls whether to remove Bcc headers. Can beonoroff(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 beonoroff(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,delayandsuccess(defaultoff)SMTP_DEFAULT_DSN_RETURN: Controls how much of a mail should be returned in DSN (Delivery Status Notification) messages. Can beheaders,fulloroff(defaultoff)
💡 All the available configurations are here : https://marlam.de/msmtp/msmtp.html
💡
SMTP_<account>_USER_FILEandSMTP_<account>_PASSWORD_FILEcan 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 -fTo install on a Kubernetes cluster, you can use the following kubernetes deployment template, then create the deployment:
kubectl apply -f deployment.yamlYou can also use the following minimal command:
$ docker run -d -p 2500:2500 --name msmtpd \
-e "SMTP_DEFAULT_HOST=smtp.example.com" \
crazymax/msmtpdRecreate the container whenever I push an update:
docker compose pull
docker compose up -dWant 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.