1. 前言
Posteio 是一个轻量级的开源邮件服务器程序,旨在简化邮件系统的部署和管理。它支持常见的邮件协议(如 SMTP 和 IMAP),并具有内置的反垃圾邮件、反病毒功能,确保邮件通信的安全性和稳定性。Posteio 易于安装,支持 Docker 容器化部署,非常适合中小型企业和个人用户使用,既能够满足基本的邮件发送与接收需求,又能够通过扩展自定义功能来提升系统的灵活性。
2. 准备
部署邮局必须使用25端口开放的服务器,并且夜梦强烈建议你使用支持rDNS的服务器。邮局服务器的准备工作可以看夜梦的这篇文章:邮局系列教程 | Racknerd开启rDNS(PTR反向解析) | 小白向教程
安装docker与docker-compose:【docker】在服务器上安装docker/docker-compose
部署邮局必须使用域名(域名邮箱没有域名那就不叫域名邮箱了)。夜梦推荐在 namesilo 上进行注册,注册时可以使用 1 美元优惠码:yemeng。
由于posteio占用内存较多(如果开启病毒监测和反垃圾邮件的话),夜梦建议你为服务器添加2~4G的swap:手动添加 SWAP
3. 域名解析
3.1 基础解析
在开始部署之前,建议先完成域名的解析。比如夜梦想要使用的域名邮箱后缀为@imoe.email
,那么需要解析的内容如下表(将imoe.email、mail.imoe.email改成你自己的域名,将记录IP改成你服务器的IP):
名称 | 记录类型 | 记录值 | 优先级/说明 |
---|---|---|---|
@ | MX | mail.imoe.email | 优先级 10 ,邮件服务器域名 |
mail | A | 你服务器的 IP 地址 | 邮件服务器 IP 地址 |
@ | TXT | v=spf1 ip4:你的服务器 IP 地址 ~all | SPF 记录,指定允许发送邮件的服务器 |
s66666666._domainkey.imoe.email. (具体看5.3节创建DKIM密钥) | TXT | v=DKIM1; k=rsa; p=MI... | DKIM 公钥记录,确保邮件真实性 |
_dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc@imoe.email | DMARC 记录,处理验证失败的邮件 |
selector1._domainkey (可选) | CNAME | 指向你的 DKIM 公钥别名 | 可选的 CNAME 记录,用于 DKIM |
其中DKIM公钥需要在部署完posteio以后获取!具体看5.3节创建DKIM密钥。这些解析的具体解释如下:
3.1.1 MX 记录(Mail Exchange)
用于指定接收邮件的服务器。
名称 | 记录类型 | 记录值 | 优先级 |
---|---|---|---|
@ | MX | mail.imoe.email | 10 |
mail.imoe.email
是你服务器的主机名,需确保该主机名解析到你的服务器 IP 地址。
3.1.2 A 记录
A 记录将主机名解析为服务器的 IP 地址。
名称 | 记录类型 | 记录值 |
---|---|---|
mail | A | 你服务器的 IP 地址 |
mail.imoe.email
指向你托管邮件服务器的 IP 地址。
3.1.3 TXT 记录
SPF、DKIM 和 DMARC 验证有助于确保你的邮件不会被标记为垃圾邮件。
SPF 记录
指定允许通过 imoe.email
域名发送邮件的服务器。
名称 | 记录类型 | 记录值 |
---|---|---|
@ | TXT | v=spf1 ip4:你的服务器 IP 地址 ~all |
如果有多个服务器发送邮件,可以继续添加更多 IP 地址或子网范围。
DKIM 记录
DKIM 记录用于签署邮件,确保其未被篡改。
名称 | 记录类型 | 记录值 |
---|---|---|
default._domainkey | TXT | 由你生成的 DKIM 公钥(Posteio 或其他邮件服务器生成的) |
你需要在你的邮件服务器上生成 DKIM 密钥,并将公钥添加到 DNS 中。
DMARC 记录
DMARC 记录定义如何处理未通过 SPF 和 DKIM 验证的邮件。
名称 | 记录类型 | 记录值 |
---|---|---|
_dmarc | TXT | v=DMARC1; p=none; rua=mailto:dmarc@imoe.email |
3.1.4 CNAME 记录(可选)
夜梦这篇文章里面不做演示。如果你需要别名解析,比如为 DKIM 记录创建别名,可以使用 CNAME 记录。不过如果只是基本的邮件服务,不一定需要配置 CNAME 记录。
名称 | 记录类型 | 记录值 |
---|---|---|
selector1._domainkey (DKIM 验证) | CNAME | 你的 DKIM 公钥别名,若需要 |
3.2 协议解析(可选)
为了使用 IMAP、SMTP、POP 协议确保邮件的发送和接收,你需要在 DNS 中添加相应的 A
记录或 CNAME
记录,这样客户端才能正确连接到你的邮件服务器。这些记录通常会指向你的邮件服务器的主机名,例如 mail.imoe.email
。以下是需要添加的 DNS 记录:
3.2.1 A 记录
这些记录将 IMAP、SMTP、POP 等子域名解析到你邮件服务器的 IP 地址。
名称 | 记录类型 | 记录值 |
---|---|---|
imap | A | 你服务器的 IP 地址 |
smtp | A | 你服务器的 IP 地址 |
pop | A | 你服务器的 IP 地址 |
3.2.2 CNAME 记录
你也可以使用 CNAME
记录将 imap
、smtp
、pop
这些子域名解析为 mail.imoe.email
,如果不想分别设置 A
记录。
名称 | 记录类型 | 记录值 |
---|---|---|
imap | CNAME | mail.imoe.email |
smtp | CNAME | mail.imoe.email |
pop | CNAME | mail.imoe.email |
3.2.3 服务端口配置(客户端)
- IMAP:
imap.imoe.email
,使用端口 143(非加密)或 993(SSL)。 - SMTP:
smtp.imoe.email
,使用端口 25(非加密)、465(SSL)、587(STARTTLS)。 - POP:
pop.imoe.email
,使用端口 110(非加密)或 995(SSL)。
邮件服务器可以支持 IMAP、SMTP、POP 协议,客户端能够正确连接到服务器并处理邮件。
4. 部署
创建文件夹:
mkdir -p /root/data/docker_data/posteio
cd /root/data/docker_data/posteio
创建配置文件:
vim docker-compose.yml
英文输入法下按 i 进入编辑模式后,将下面的配置文件编辑好粘贴进去。配置文件中禁用反病毒功能(DISABLE_CLAMAV=TRUE)与禁用反垃圾邮件功能(DISABLE_RSPAMD=TRUE),可以大幅减低内存和CPU占用,请根据需求选择是否禁用。
version: '3.7'
services:
mailserver:
image: analogic/poste.io
hostname: mail.imoe.email
ports:
- "25:25"
- "110:110"
- "143:143"
- "587:587"
- "993:993"
- "995:995"
- "4190:4190"
- "465:465"
- "80:80" # 添加 80 端口,用于 Let's Encrypt 验证
- "443:443" # 启用 HTTPS
environment:
- LETSENCRYPT_EMAIL=admin@imoe.email
- LETSENCRYPT_HOST=mail.imoe.email
- VIRTUAL_HOST=mail.imoe.email
# - DISABLE_CLAMAV=TRUE # 反病毒,根据需求禁用
# - DISABLE_RSPAMD=TRUE # 反垃圾邮件,根据需求禁用
- TZ=Asia/Shanghai
- HTTPS=ON # 启用 HTTPS
volumes:
- /etc/localtime:/etc/localtime:ro
- ./mail-data:/data # 确保持久化数据卷
按 esc
后,输入:wq
保存退出。运行:
docker-compose up -d
然后就可以访问mail.imoe.email
(mail.yourdomain.com
)进入WEB界面了。
5. 使用
5.1 注册
访问web界面提示隐私错误不用管,直接进入即可。
注册管理员用户:
注册完就可以进入管理员界面了:
5.2 配置Let’s encrypt证书
配置Let’s encrypt证书:
对着输入,换成你自己的域名:
点击save changes保存。不出意外的话是不会出意外的,申请一切正常。
5.3 创建 DKIM 密钥
点击进入域名的配置页面:
点击创建DKIM密钥:
添加DNS解析,这里的解析就是3.1 基础解析的第四条:
5.4 webmail使用
点击右上角的webmail,登录用户名和登录密码和管理后台一致。
使用界面,简洁明了:
6. 问题记录
在发件时显示“你的 DKIM 签名无效”,夜梦还不清楚啥原因……知道的小伙伴可以和夜梦聊聊,感谢!