这个邮件服务是用docker部署的, 很多步骤都直接在配置文件中完成了, 非常省事. 而且它只提供邮件服务, 没有webmail, 因此也不占用80/443端口, 这意味着你的服务器还可以用来做其他的事. 我自己在部署的时候发现官方的介绍给的对小白不是很友好, 按照官方的简单部署流程跟着做发现会报错. 而很多能找到的几年前的文章里给的方法大多现在也有改动, 完全照做可能是不行了, 因此这里简单记录下自己摸索的部署过程.

提前准备

首先要有一个绑定了服务器的域名, 要解析DNS, 我这里以cloudflare为例. 这里假设服务器的域名是domain.com, 服务器ip是1.2.3.4, 实际使用时把这个改成自己的就好.

TypeNameContent
Amail1.2.3.4
MXdomain.commail.domain.com
TXTdomain.comv=spf1 mx ~all
TXT_dmarcv=DMARC1; p=quarantine; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; sp=quarantine

然后为自己的的VPS添加RDNS记录, 这个不设置的话邮件很容易进Junk. 申请的方法一般是在服务器后台的Network或者IP相关的页面, 我这里以搬瓦工的为例子.

1

然后申请一个证书, 因为希望走TLS协议, 申请证书的方法在这里这里详细地介绍过了, 就不赘述了.

配置docker compose

安装docker和docker compose

# 安装docker
curl -sSL https://get.docker.com/ | sh
systemctl enable --now docker
# 安装docker compose
curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

下载所需管理和配置文件.

mkdir ~/mailserver && cd ~/mailserver
DMS_GITHUB_URL='https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master'
wget "${DMS_GITHUB_URL}/docker-compose.yml"
wget "${DMS_GITHUB_URL}/mailserver.env"
wget "${DMS_GITHUB_URL}/setup.sh"
chmod a+x ./setup.sh

然后编辑docker-compose.yml文件. 特别注意一下hostname+domainname等于你的邮件域名, 比如下面的填法结果是mail.domain.com. 然后volumes那一项中写好自己的证书地址, 我就以证书存放在/tmp/ssl/为例设置了.

version: '3.8'

services:
  mailserver:
    image: docker.io/mailserver/docker-mailserver:latest
    container_name: mailserver
    # If the FQDN for your mail-server is only two labels (eg: example.com),
    # you can assign this entirely to `hostname` and remove `domainname`.
    hostname: mail
    domainname: domain.com
    env_file: mailserver.env
    # More information about the mail-server ports:
    # https://docker-mailserver.github.io/docker-mailserver/edge/config/security/understanding-the-ports/
    # To avoid conflicts with yaml base-60 float, DO NOT remove the quotation marks.
    ports:
      - "25:25"    # SMTP  (explicit TLS => STARTTLS)
      - "143:143"  # IMAP4 (explicit TLS => STARTTLS)
      - "465:465"  # ESMTP (implicit TLS)
      - "587:587"  # ESMTP (explicit TLS => STARTTLS)
      - "993:993"  # IMAP4 (implicit TLS)
      - "110:110"
      - "995:995"
    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
      - /tmp/ssl/:/tmp/ssl:ro
    restart: always
    stop_grace_period: 1m
    cap_add:
      - NET_ADMIN
    healthcheck:
      test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"
      timeout: 3s
      retries: 0

填写完毕后配置mailserver.env文件. 由于内容太多, 我只给几个需要修改的地方, 如果有定制化需求可以参考官方说明.

[email protected]
PERMIT_DOCKER=network
SSL_TYPE=manual
SSL_CERT_PATH=/tmp/ssl/server.crt
SSL_KEY_PATH=/tmp/ssl/server.key

然后添加邮箱信息.

./setup.sh email add [email protected] your_password

生成DKIM 签名记录.

./setup.sh config dkim

上面这条指令会在当前目录的./docker-data/dms/config/opendkim/keys/domain.com/目录生成一个mail.txt文件, 根据里面的信息在DNS解析中添加一条Type为TXT, Name为mail._domainkey, Content为DKIM内容的记录. 特别注意的, 字符串太长会有换行情况, 记得把换行的部分给拼接起来, 像下面这样.

2.png

填写出来大概是这样子的.

3.png

然后就可以up了.

docker-compose up -d mailserver

记得开放所需要的端口.

ufw allow 25
ufw allow 110
ufw allow 143
ufw allow 465
ufw allow 587
ufw allow 993
ufw allow 995

测试和评分

如果有失败的, 可以看下后面的踩坑记录, 可能会有帮助.

首先测试一下tls有没有生效. 这个网址中输入自己的邮箱域名就可以查看是否支持tls了.

4

由于docker-mailserver没有webmail, 所以我们要通过客户端使用. 这里以Mac的mail应用为例.

5 6

然后发送邮件试试看~

7.png

一些后话 (坑)

可以到mail-tester试一下自己邮件服务的评分能达到多少. 我是8.9, 因为这个主机厂商的后台有问题, 我RDNS设置的是邮件域名, 但是莫名其妙解析到了一个奇怪的域名, 只能联系客服解决😅. 解析域名可以用nslookup指令来查看.

然后如果始终发不出邮件, 可以用docker-compose logs -f查看日志, 如果是因为timeout的话, 很大概率是因为服务商把25端口给ban了, 防止垃圾邮件服务部署. 这个的话一般是要联系客服才能开放. 是不是25号端口被ban可以在防火墙查看, 也可以通过telnet smtp.google.com 25测试. 如果结果一直是trying ip...的话那就是没开放, 如果是输出了三行那就是可以正常连接.

更新

在正确的rnds解析生效后, mail-tester分数有10/10了.

8

Reference

https://github.com/docker-mailserver/docker-mailserver

https://www.treesir.pub/post/docker-deploy-mailserver/

https://lala.im/4224.html

Tags: none

4 Comments

  1. 独特的构思和新颖的观点,让这篇文章在众多作品中脱颖而出。

  2. 每个标点都承载着思考的重量。

  3. 新车即将上线 真正的项目,期待你的参与

  4. 2025年10月新盘 做第一批吃螃蟹的人coinsrore.com
    新车新盘 嘎嘎稳 嘎嘎靠谱coinsrore.com
    新车首发,新的一年,只带想赚米的人coinsrore.com
    新盘 上车集合 留下 我要发发 立马进裙coinsrore.com
    做了几十年的项目 我总结了最好的一个盘(纯干货)coinsrore.com
    新车上路,只带前10个人coinsrore.com
    新盘首开 新盘首开 征召客户!!!coinsrore.com
    新项目准备上线,寻找志同道合 的合作伙伴coinsrore.com
    新车即将上线 真正的项目,期待你的参与coinsrore.com
    新盘新项目,不再等待,现在就是最佳上车机会!coinsrore.com
    新盘新盘 这个月刚上新盘 新车第一个吃螃蟹!coinsrore.com

Leave a comment...