使用docker-mailserver搭建輕量郵件服務器

自建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, 添加郵箱[email protected] 密碼456asdqwe

docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup email add [email protected] 456asdqwe

設置轉發郵箱 [email protected], [email protected]收到的郵件都會自動轉發到[email protected]

docker run --rm -v $PWD/dms/config:/tmp/docker-mailserver/ mailserver/docker-mailserver setup alias add [email protected] [email protected]

創建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郵件通知了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章