Host your own Email server¶
All steps run in Arch linux. The system should have installed 'docker and docker-compose.
1. Set DNS¶
I suppose the domain is mail.abc.com, and the IP is 1.2.3.4
------------------------------------------------------------------------------
Type Host value
1 A mail.abc.com 1.2.3.4
2 MX root domain(@) mail.abc.com
3 TXT root domain(@) v=spf1 ip4:1.2.3.4 -all
4 TXT _dmarc v=DMARC1; p=reject; adkim=r; aspf=r; pct=100
5 TXT mail._domainkey DKIM file
------------------------------------------------------------------------------
2. Downlaod and config¶
2.1 necessary files¶
DMS_GITHUB_URL="https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master"
wget "${DMS_GITHUB_URL}/compose.yaml"
wget "${DMS_GITHUB_URL}/mailserver.env"
services:
mailserver:
image: ghcr.io/docker-mailserver/docker-mailserver:latest
container_name: mailserver
# Provide the FQDN of your mail server here (Your DNS MX record should point to this value)
hostname: mail.abc.com
env_file: mailserver.env
# More information about the mail-server ports:
# https://docker-mailserver.github.io/docker-mailserver/latest/config/security/understanding-the-ports/
ports:
- "25:25" # SMTP (explicit TLS => STARTTLS, Authentication is DISABLED => use port 465/587 instead)
- "143:143" # IMAP4 (explicit TLS => STARTTLS)
- "465:465" # ESMTP (implicit TLS)
- "587:587" # ESMTP (explicit TLS => STARTTLS)
- "993:993" # IMAP4 (implicit TLS)
volumes:
- ./docker-data/dms/mail-data/:/var/mail/
- ./docker-data/dms/mail-state/:/var/mail-state/
- ./docker-data/dms/mail-logs/:/var/log/mail/
- ./docker-data/dms/config/:/tmp/docker-mailserver/
- /etc/localtime:/etc/localtime:ro
#- /etc/nginx/certificate/:/etc/letsencrypt
- /etc/nginx/certificate/live/mail.abc.com/fullchain.pem:/etc/cert/fullchain.pem
- /etc/nginx/certificate/live/mail.abc.com/privkey.pem:/etc/cert/privkey.pem
restart: always
stop_grace_period: 1m
# Uncomment if using `ENABLE_FAIL2BAN=1`:
cap_add:
- NET_ADMIN
healthcheck:
test: "ss --listening --ipv4 --tcp | grep --silent ':smtp' || exit 1"
timeout: 3s
retries: 0
2.2 Set SSL¶
Host:
/etc/nginx/certificate/live/mail.abc.com/fullchain.pem
/etc/nginx/certificate/live/mail.abc.com/privkey.pem
3. Start mail server¶
Create an email account Set DKIM Display mail.txt The complete DKIMv=DKIM1; h=sha256; k=rsa;
p=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxx
FAQ¶
Enable DKIM¶
1.Backup docker-date
2.Delete docker-date and container 3.Start a new container 4.Delete docker-date 5.Uncompress docker-date.tar.gz 6.Restart the container