Awesome Open Source
Awesome Open Source

Versatile Postfix Mail Server (marvambass/versatile-postfix)

maintained by MarvAmBass

FAQ - All you need to know about the marvambass Containers

What is it

This Dockerfile (available as marvambass/versatile-postfix) gives you a completly versatile postfix mailserver.

It signs outgoing mails with DKIM by default. You can create one Domain with different users with their passwords. For multiple Domains you need to use multiple containers or create your own fork of this project.

This is not a POP3 or IMAP server, you will get incomming E-Mails in the Maildir format. Read it with less or link a IMAP Server to the volume.

View in Docker Registry marvambass/versatile-postfix

View in GitHub MarvAmBass/docker-versatile-postfix

Environment variables and defaults

  • optional, no default, example usage: postmaster:root;john:root;j.doe:root
  • default: not set - if set to any value the DKIM Signing will be deactivated
  • default: simple - can be either relaxed or simple
  • default: mail, you can customize DKIM selector name


the following variable/s are only if you have some specific settings you need. They help you overwrite everything after the config was generated. If you can update your setting with the variables from above, it is strongly recommended to use them!

some characters might brake your configuration!

    • set/edit all configurations in /etc/postfix/ using the POSTFIX_RAW_CONFIG_ followed by the setting name

for example: to set mynetworks_style = subnet just add a environment variable POSTFIX_RAW_CONFIG_MYNETWORKS_STYLE=subnet

Running the Mailserver

This Dockerfile is build to be as versatile as possible. Therefore the startup script takes care of all the important things.

You can easily create a new Mailserver for a domain with several users.

Keep in mind, this is a smtp server only. To read recievied mails you should link a folder inside the conatiner. Otherwise all mails will get lost after you delete your container.

To create a new postfix server for your domain you should use the following commands:

$ docker run -p 25:25 -v /maildirs:/var/mail \
    -v /dkim:/etc/postfix/dkim/ \
    -e 'ALIASES=postmaster:root;hostmaster:root;webmaster:root' \
    marvambass/versatile-postfix \ \
    user:password \
    user1:password \
    user2:password \

this creates a new smtp server which listens on port 25, stores mail beneath /mailsdirs.

The /dkim directory has to contain a DKIM-Key (see above) with the name dkim.key

It has serveral user accounts like user1 with password "password" and a mail address [email protected]


This Server uses DKIM by default. So we need our DKIM Keys. If you don't have a DKIM Key, the Server will generate it on the first start. Just be sure, that you make the directory /etc/postfix/dkim/ available and install the logged public key to your DNS System

More about DKIM

To generate those keys you'll need the opendkim tools

$ apt-get install opendkim-tools

This generates a new certificate for with selector -s mail. If you want to Test DKIM first, add -t argument which stands for test-mode.

$ opendkim-genkey -s mail -d

Just put the file mail.private as dkim.key inside the dkim directory you'll later link into the container using -v.

The mail.txt should be imported into the DNS System. Add a new TXT-Record for mail._domainkey [selector._domainkey]. And add as value the String starting "v=DKIM1;..." from the mail.txt file.


$ cat mail.txt
mail._domainkey	IN	TXT	( "v=DKIM1; k=rsa; "
	  "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcUp8Q1sbxgnR2iL7w+TOHN1IR6PzAP3vmUoPfeN07NGfWo8Wzxyn+hqqnC+mbPOW4ZDoAiu5dvpPsCt1RQalwBw/iPlB/8ScTlPGRpsTLo4ruCDL+yVkw32/UhvCL8vbZxM/Q7ELjO6AqRRW/KuCvbd5gNRYGeyjWd+UQAfmBJQIDAQAB" )  ; ----- DKIM key mail for

You need to put this line in your DNS config zone:

mail._domainkey	IN	TXT	"v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcUp8Q1sbxgnR2iL7w+TOHN1IR6PzAP3vmUoPfeN07NGfWo8Wzxyn+hqqnC+mbPOW4ZDoAiu5dvpPsCt1RQalwBw/iPlB/8ScTlPGRpsTLo4ruCDL+yVkw32/UhvCL8vbZxM/Q7ELjO6AqRRW/KuCvbd5gNRYGeyjWd+UQAfmBJQIDAQAB"

Thats all you need for DKIM

Check DNS config:

$ host -t TXT descriptive text "v=DKIM1\; k=rsa\; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcUp8Q1sbxgnR2iL7w+TOHN1IR6PzAP3vmUoPfeN07NGfWo8Wzxyn+hqqnC+mbPOW4ZDoAiu5dvpPsCt1RQalwBw/iPlB/8ScTlPGRpsTLo4ruCDL+yVkw32/UhvCL8vbZxM/Q7ELjO6AqRRW/KuCvbd5gNRYGeyjWd+UQAfmBJQIDAQAB"

Testing SMTP Mail recivieing

$ mailx -r "[email protected]" -s "Test Mail Subject" [email protected] < /etc/hosts

Testing the SMTP Auth and SMTP sending via telnet:

$ echo -ne '\0user\0password' | openssl enc -base64

$ telnet 25
Connected to
Escape character is '^]'.
ehlo test
250-SIZE 10240000
auth plain AHVzZXIAcGFzc3dvcmQ=
235 Authentication successful
mail from: [email protected]
250 2.1.0 Ok
rcpt to: [email protected]
250 2.1.5 Ok
354 End data with <CR><LF>.<CR><LF>
Hi there
this is just a basic test message
250 2.0.0 Ok: queued as 2E7FB27F
221 Bye
Connection closed by foreign host.


Alternative Project Comparisons
Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Shell (175,691
Server (65,968
Dns (10,210
Mail (8,912
Selector (7,304
Smtp (3,882
Postfix (1,499
Dkim (345
Mailserver (345