# Running Docker Mail Server - A Full Stack Email Solution - In Docker

## What is Docker Mailserver?

> [Docker Mailserver is a] production-ready fullstack but simple mail server (SMTP, IMAP, LDAP, Antispam, Antivirus, etc.). Only configuration files, no SQL database. Keep it simple and versioned. Easy to deploy and upgrade. - https://github.com/docker-mailserver/docker-mailserver

## Installing Docker

1. Log into the Linux host and run the following commands in a terminal window
   # update software repositories
   sudo apt update
   # install prerequisites
   sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg-agent -y
   # add docker gpg key
   curl -fsSL https://download.docker.com/linux/$(awk -F'=' '/^ID=/{ print $NF }' /etc/os-release)/gpg | sudo apt-key add -
   # add docker software repository
   sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/$(awk -F'=' '/^ID=/{ print $NF }' /etc/os-release) $(lsb_release -cs) stable"
   # install docker
   sudo apt install docker-ce docker-compose containerd.io -y
   # enable and start docker service
   sudo systemctl enable docker && sudo systemctl start docker
   # add the current user to the docker group
   sudo usermod -aG docker $USER
   # reauthenticate for the new group membership to take effect
   su - $USER

## Running Docker Mailserver Container

1. Continue with the following commands in a terminal window
   # create main working directories
   mkdir ~/docker/mailserver/{data,state,logs,config} -p
   # set owner of working directories
   sudo chown "$USER":"$USER" ~/docker -R
   # run the mailserver container
   docker run -d --name=mailserver --hostname="$HOSTNAME" --domainname="docker.local" -p 25:25 -p 143:143 -p 587:587 -p 993:993 -e ENABLE_SPAMASSASSIN=1 -e SPAMASSASSIN_SPAM_TO_INBOX=1 -e ENABLE_CLAMAV=1 -e ENABLE_POSTGREY=1 -e ENABLE_FAIL2BAN=0 -e ENABLE_SASLAUTHD=0 -e ONE_DIR=1 -e TZ=America/New_York -v ~/docker/mailserver/data/:/var/mail/ -v ~/docker/mailserver/state/:/var/mail-state/ -v ~/docker/mailserver/logs/:/var/log/mail/ -v ~/docker/mailserver/config/:/tmp/docker-mailserver/ --restart=unless-stopped mailserver/docker-mailserver
   # create a user/inbox
   docker run --rm -e MAIL_USER=i12bretro@docker.local -e MAIL_PASS=supersecret -it mailserver/docker-mailserver /bin/sh -c 'echo "$MAIL_USER|$(doveadm pw -s SHA512-CRYPT -u $MAIL_USER -p $MAIL_PASS)"' >> ~/docker/mailserver/config/postfix-accounts.cf

## Setting Up An E-Mail Client

1. Download Mozilla Thunderbird Portable Download
2. Run the downloaded paf.exe file and extract it to any location
3. Check the Run box and click Finish
4. Fill out Your name, Email address and Password for the account created earlier
5. Click Manual config
6. For Incoming, enter the DNS name or IP address of the docker host
7. For Outgoing, enter the DNS name or IP address of the docker host
8. Click the Re-test button, Thunderbird should set some additional values
9. Click Done
10. Select I understand the risks > Done
11. From within Thunderbird, compose a new email address and send it to the inbox created earlier to test internal emails are working

Documentation: https://docker-mailserver.github.io/docker-mailserver/edge/