自建email服務器的一個好處是可以無限發郵件,而qq郵箱 163郵箱等一般都有每日發送上限。
docker-mailserver是一個輕量級的郵件服務器,一般只用來發送郵件,接收郵件的推薦做法是通過設置額外郵箱轉發到指定的郵箱,比如你自己的qq郵箱。
目前最新版本是10.4.0,日常占用僅100M+,缺點是沒有web管理界面,管理郵箱賬戶只能通過命令行
需要准備好一個域名,假設為mail.my.com,有步驟需要到dns設置mail._domainkey的txt記錄,這樣發送的郵件才不會被標記為垃圾郵件。
新建目錄
新建目錄dms,然后再dms下新建config mail-data mail-logs mail-state目錄
mkdir dms cd dms mkdir config mail-data mail-logs mail-state
cd ..
添加郵箱賬戶
將剛剛新建的目錄./dms/config映射到/tmp/docker-mailserver, 添加郵箱admin@mail.my.com 密碼456asdqwe
docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup email add admin@mail.my.com 456asdqwe
設置轉發郵箱 xxx@qq.com, admin@my.com收到的郵件都會自動轉發到xxx@qq.com
docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup alias add admin@mail.my.com xxx@qq.com
創建dkim和設置txt記錄
docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup config dkim
此步驟會生成dms/config/opendkim/keys/mail.my.com/mail.my.com.txt文件,可以使用cat輸出文件內容
cat dms/config/opendkim/keys/mail.my.com/mail.my.com.txt
輸出內容大概如下
然后到dns管理界面去添加一條txt記錄 如圖所示, 類型選擇TXT, 名稱輸入mail._domainkey, 內容復制上一步文件中的部分內容,注意大體格式是v=DKIM1;h=sha256;k=rsa; p=xxxxxx
每次只復制引號內的內容然后粘貼到dns管理界面就行。
配置完畢可以通過dig mail.my.com TXT來測試dns配置是否已經生效
結果里有一行是mail.my.com 300 IN TXT "v=DKIM1; h=sha256; k=rsa; p=xxx"就說明配置正確,注意里邊是否有\",這就表示多復制了引號進去
通過docker-compose啟動
新建docker-compose.yml如下
version: '3.8'
services:
mailserver:
image: mailserver/docker-mailserver
container_name: mailserver
hostname: mail.my.com
domainname: mail.my.com
ports:
- "25:25"
- "587:587"
- "465:465"
volumes:
- ./dms/mail-data/:/var/mail/
- ./dms/mail-state/:/var/mail-state/
- ./dms/mail-logs/:/var/log/mail/
- ./dms/config/:/tmp/docker-mailserver/
- /etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory/mail.my.com/:/etc/letsencrypt/
- /etc/localtime:/etc/localtime:ro
environment:
- ENABLE_FAIL2BAN=1
- SSL_TYPE=manual
- SSL_CERT_PATH=/etc/letsencrypt/mail.my.com.crt
- SSL_KEY_PATH=/etc/letsencrypt/mail.my.com.key
# Allow sending emails from other docker containers
# Beware creating an Open Relay: https://docker-mailserver.github.io/docker-mailserver/edge/config/environment/#permit_docker
- PERMIT_DOCKER=network
# All env below are default settings:
- DMS_DEBUG=0
- ONE_DIR=1
- ENABLE_POSTGREY=0
- ENABLE_CLAMAV=0
- ENABLE_SPAMASSASSIN=0
# You may want to enable this: https://docker-mailserver.github.io/docker-mailserver/edge/config/environment/#spoof_protection
# See step 8 below, which demonstrates setup with enabled/disabled SPOOF_PROTECTION:
- SPOOF_PROTECTION=0
cap_add:
- NET_ADMIN # For Fail2Ban to work
- SYS_PTRACE
注意我這里用的是自定義證書,通過caddy申請let's encrypt證書,修改了數據目錄位置,將證書放到了/etc/ssl/caddy/certificates/acme-v02.api.letsencrypt.org-directory下。
所以這里把對應域名的目錄映射進去,然后通過SSL_CERT_PATH和SSL_KEY_PATH指定證書位置。官方文檔有更多關於ssl證書申請和配置的相關信息。如果是通過雲服務商提供的ssl證書直接放到配置的目錄下指定路徑即可
映射了25(SMTP) 587(ESMTP ) 465(ESMTP ) 端口,記得安全組里要開放這幾個端口
最后執行docker-compose up -d就成功啟動郵件服務器了,通過smtp就能正常發送郵件了
在grafana、kibana之類的應用就可以配置smtp郵件通知了。