This version has been replaced early May by docker-mailserver:v2
A fullstack but simple mail server (smtp, imap, antispam, antivirus...).
Only configuration files, no SQL database. Keep it simple and versioned.
Easy to deploy and upgrade.
- postfix with smtp auth
- courier-imap with ssl support
- spamassasin supporting custom rules
- clamav with automatic updates
- LetsEncrypt and self-signed certificates
- optional pop3 server
- integration tests
- automated builds on docker hub
Why I created this image: Simple mail server with Docker
Before you open an issue, please have a look this
README, the FAQ and Postfix documentation.
# get latest image docker pull tvial/docker-mailserver # create a "docker-compose.yml" file containing: mail: image: tvial/docker-mailserver hostname: mail domainname: domain.com # your FQDN will be 'mail.domain.com' ports: - "25:25" - "143:143" - "587:587" - "993:993" volumes: - ./spamassassin:/tmp/spamassassin/ - ./postfix:/tmp/postfix/ # start he container docker-compose up -d mail
Managing users and aliases
Users are managed in
postfix/accounts.cf with the helper script
Just add the full email address and its password separated by a pipe.
Then the user databases for courier and cyrus sasl with encrypted passwords must be generated with the following:
docker run -ti --rm -v "$(pwd)"/postfix:/tmp/postfix -h mail.domain.com -t tvial/docker-mailserver generate-user-databases
The needed DBs will then be found inside
For security reason clear text passwords are no longer allowed on running instances of the image. For that reason the file
postfix/accounts.cf MUST be removed before starting up the container (it will not start up if that file is still there).
Please first read Postfix documentation on virtual aliases.
Aliases are managed in
An alias is a full email address that will be:
- delivered to an existing account in
- redirected to one or more other email adresses
Alias and target are space separated.
# Alias to existing account firstname.lastname@example.org email@example.com # Forward to external email address firstname.lastname@example.org email@example.com
- empty (default) => SSL disabled
- letsencrypt => Enables Let's Encrypt certificates
- self-signed => Enables self-signed certificates
- empty (default) => POP3 service disabled
- 1 => Enables POP3 service
- empty (default) => courier daemons might start
- *1 => do not launch any courier daemons (imap, pop3)
- 2.0 (default) => add spam info headers if at, or above that level
- 6.31 (default) => add 'spam detected' headers at that level
- 6.31 (default) => triggers spam evasive actions
- empty (default) => No sasl_passwd will be created
- string => A /etc/postfix/sasl_passwd will be created with that content and postmap will be run on it
- empty (default) => fail2ban service disabled
- 1 => Enables fail2ban service
Please read how the container starts to understand what's expected.
Please read the SSL page in the wiki for more information.
Things to do or to improve are stored on Github, some open by myself.
Feel free to improve this docker image.
- Add integration tests in
- Build image and run tests using
- Document your improvements
- Commit, push and make a pull-request