使用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, 添加郵箱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郵件通知了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM