邮件服务器搭建教程 | DMS
简介
docker-mailserver(简称 DMS)是一款生产级的全功能邮件服务器解决方案,支持 SMTP、IMAP、LDAP 等多种邮件服务协议。DMS 以其“保持简单和可版本化”为核心理念,采用纯文件配置,无需依赖 SQL 数据库,使得部署和管理变得更为简便。DMS 的设计旨在为中小企业或个人用户提供一个稳定、安全且易于维护的邮件服务环境。
参考资源
- 官方文档:Docker Mailserver Documentation
- 邮件服务器介绍:Introduction to Docker Mailserver
- 配置教程:Environment Configuration
- CSDN 博客教程:使用 Docker Compose 部署邮件服务器
部署教程
1. 编写 docker-compose 文件
首先,下载必要的 docker-compose.yaml
和环境配置文件 mailserver.env
:
1 | DMS_GITHUB_URL="https://raw.githubusercontent.com/docker-mailserver/docker-mailserver/master" |
假设域名为 example.com ,并且希望能够发送和接收该地址 test@example.com 的电子邮件。根据域名修改 docker-compose.yaml
中的 hostname
字段:
1 | mailserver: |
2. 配置 DNS 解析
邮件服务器的正常运作依赖于正确的 DNS 设置,以确保邮件能够正常发送和接收。以下是基本的 DNS 记录配置步骤。
添加 MX 记录
- 记录类型:
MX
- 主机名:
@
- 值:
mail.example.com
注意,主机名和邮件服务器是分开的,可将不同域名映射到同一个 mail.example.com
。而 mail.example.com
通过 A 记录指向具体的服务地址。
比如 example.com
的 MX 记录指向 mail.example.com
,example.net
的 MX 记录也指向 mail.example.com
。这一来,该邮件服务器支持了两类邮件名,比如 test@example.com
和 test@example.net
。
添加 A 记录
- 记录类型:
A
- 主机名:
mail
- 值:
服务器所在 IP
添加 PTR 记录
PTR 记录用于将 IP 地址反向解析到域名。
这一项需要根据服务器提供商进行设置,如果不设置,一些邮箱的反垃圾策略可能会拒收该邮件,影响发邮件但不影响接收邮件。
阿里云服务器这部分功能的开通可能需要收费:阿里云帮助文档 - PTR 记录
检查 DNS 解析
使用 dig
命令检查 DNS 设置是否正确:
1 | ❯ dig @1.1.1.1 +short MX example.com |
3. 邮件安全配置
Ref:DMARC, DKIM, and SPF Security Measures
确保邮件系统的安全性非常重要,以下是设置 DMARC、DKIM 和 SPF 的基本步骤:
配置 SPF 记录
- 记录类型:
TXT
- 主机名:
@
- 值:
v=spf1 mx -all
配置 DMARC 和 DKIM
这些配置有助于增强发出邮件的认证,减少被标记为垃圾邮件的风险:
- DMARC 记录类型:
TXT
- 主机名:
_dmarc
- 值:适当的 DMARC 策略
例如:
1 | v=DMARC1; p=none; sp=none; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400; |
- DKIM 记录类型:
TXT
- 主机名:
mail._domainkey
- 值:DNS 记录值可以直接使用以下内容
1 | v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFACAQ8AMIIBCgKCAQEAaH5KuPYPSF3Ppkt466BDMAFGOA4mgqn4oPjZ5BbFlYA9l5jU3bgzRj3l6/Q1n5a9lQs5fNZ7A/HtY0aMvs3nGE4oi+LTejt1jblMhV/OfJyRCunQBIGp0s8G9kIUBzyKJpDayk2+KJSJt/lxL9Iiy0DE5hIv62ZPP6AaTdHBAsJosLFeAzuLFHQ6USyQRojefqFQtgYqWQ2JiZQ3iqq3bD/BVlwKRp5gH6TEYEmx8EBJUuDxrJhkWRUk2VDl1fqhVBy8A9O7Ah+85nMrlOHIFsTaYo9o6+cDJ6t1i6G1gu+bZD0d3/3bqGLPBQV9LyEL1Rona5V7TJBGg099NQkTz1IwIDAQAB |
4. 配置 TLS 证书
更多细节可以参考:
- LetsEncrypt 配置教程:『Let's Encrypt 域名证书增强网站安全』
- DMS + SSL 官方文档:SSL Configuration Documentation
修改 mailserver.env
文件,设置 SSL 类型:
1 | SSL_TYPE=letsencrypt |
将本地的 /etc/letsencrypt
目录挂载到容器中:
1 | mailserver: |
使用 certbot
为 mail.example.com
配置证书:
1 | sudo certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d mail.example.com --nginx |
也可以手动 DNS 验证:
1 | sudo certbot certonly --server https://acme-v02.api.letsencrypt.org/directory --agree-tos -d mail.example.com --manual --preferred-challenges=dns |
5. 启动邮件服务器
现在,可以使用 docker-compose
启动邮件服务器:
1 | docker-compose up -d |
此外,邮件安全配置部分的 dkim
还需通过以下命令完成:
1 | docker exec -it mailserver setup config dkim |
重启容器后生效。
6. 开放端口
在防火墙和服务器安全组中,开发以下端口。这些端口用于发送和接收电子邮件,以下是每个端口的详细说明:
-
端口 25(SMTP):
- 协议:SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)
- 用途:用于发送电子邮件。
- 特点:这个端口通常用于服务器之间的邮件传输,不推荐用于客户端连接,因为它不支持加密。出于安全考虑,很多现代邮件服务商要求使用更安全的端口(如 465 或 587 )。
-
端口 465(ESMTP):
- 协议:ESMTP(Extended Simple Mail Transfer Protocol,扩展简单邮件传输协议)
- 用途:用于发送电子邮件。
- 特点:这个端口支持隐式 TLS(即连接始终加密),是一个较为安全的发送邮件选项。
-
端口 587(ESMTP):
- 协议:与端口 465 相同,是 ESMTP。
- 用途:也是用于发送电子邮件。
- 特点:支持显式 TLS,即连接开始时不加密,通过 STARTTLS 命令升级到 TLS 加密。现在被推荐为客户端发送电子邮件的标准端口。
-
端口 143(IMAP4):
- 协议:IMAP4(Internet Message Access Protocol, Version 4,互联网消息访问协议第四版)
- 用途:用于访问和管理邮件服务器上的邮件。
- 特点:支持在邮件服务器上直接操作邮件(如读取、删除等),客户端通过 STARTTLS 可以启用 TLS 加密。
-
端口 993(IMAP4):
- 协议:与端口 143 相同,是 IMAP4。
- 用途:用于安全地访问和管理邮件服务器上的邮件。
- 特点:支持隐式 TLS,即连接始终加密,提供了比端口143更高的安全性。
7. 管理用户
1 | # 查看帮助 |
8. 测试工具
推荐工具:https://www.emclient.com/
此外,也可以绑定到其他邮箱服务器。
前端 Web 邮箱
TODO:
轻量级 Web 页面
项目:https://github.com/afterlogic/webmail-lite-8
项目容器:
文档:https://afterlogic.com/docs/webmail-lite/configuring-webmail
https://blog.csdn.net/Coin_Collecter/article/details/129590620
先起容器:
1 | version: "3.3" |
拷贝文件:
1 | docker cp webmail-web:/var/www/html/data ./ |
再挂载目录。