Maddy是一款用Go语言开发的邮件服务器,它实现了运行电子邮件服务器所需的所有功能。
Maddy用一个具有统一配置和最低维护成本的守护进程取代了Postfix、Dovecot.OpenDkIM、OpenSPF、OpenDMARC等程序。

第一步:需要且一定要开放端口 25,465,587,993,143 有的云主机商为防止垃圾邮件不允许25端口,所以在操作之前,需要确认主机商没有屏蔽25端口。 这儿为大家推荐海外主机商 cloudcone

lsof -i:25,465,587,993,143

确认端口未被占用,然后域名解析到主机IP,同时需要确认你的主机防火墙放开对应端口
域名解析记录包括

A记录(mail.lvtao.net -> IP)
MX(lvtao.net -> mail.lvtao.net)
TXT(_dmarc -> v=DMARC1; p=none; rua=mailto:[email protected])
TXT (xx.xx -> v=spf1 mx ip4:x.x.x.x/32 -all)

第二步:配置邮件服务

apt -y update
apt -y install acl zstd wget certbot
wget https://github.com/foxcpp/maddy/releases/download/v0.6.3/maddy-0.6.3-x86_64-linux-musl.tar.zst
unzstd maddy-0.6.3-x86_64-linux-musl.tar.zst
tar -xvf maddy-0.6.3-x86_64-linux-musl.tar
cd maddy-0.6.3-x86_64-linux-musl

# 还是用默认的/etc/maddy比较好,不然要找默认命令来修改
mkdir /etc/maddy
cp maddy.conf /etc/maddy
cp maddy maddyctl /usr/bin
cp systemd/*.service /etc/systemd/system

# maddy不能直接运行在root用户下,务必创建一个单独的用户:
useradd -mrU -s /sbin/nologin -d /var/lib/maddy -c "maddy mail server" maddy


# (可选) 用certbot申请一个ssl证书
# maddy是没有web客户端的,如果自建web客户端,比如rainloop这类,则需要ssl
# 实际上可以直接用本地的客户端,比如thunderbird、foxmail这些。
### 如果没装nginx
certbot certonly --standalone --agree-tos --no-eff-email --email [email protected] -d mail.lvtao.net
### 如果你的机器上有nginx,安装certbot插件
apt -y install python-certbot-nginx
# 加一个单独站点的配置
cat > /etc/nginx/conf.d/maddy.conf <<EOF
server {
    listen       80;
    server_name  mail.lvtao.net;
}
EOF
# 申请
certbot --nginx --agree-tos --no-eff-email --email [email protected]


# 配置acl,让maddy这个用户有权限读取证书
setfacl -R -m u:maddy:rx /etc/letsencrypt/{live,archive}

# 编辑配置文件
vi /etc/maddy/maddy.conf
# 修改下面列出的配置:
$(hostname) = mail.lvtao.net
$(primary_domain) = lvtao.net
$(local_domains) = $(primary_domain)

tls file /etc/letsencrypt/live/$(hostname)/fullchain.pem /etc/letsencrypt/live/$(hostname)/privkey.pem


# 启动并设置自动开机
systemctl enable --now maddy.service
systemctl status maddy.service

第三步:补充设置dkim

maddy在第一次启动的时候会生成一个dkim密钥,所以现在来补充配置一下dkim的dns解析

cat /var/lib/maddy/dkim_keys/lvtao.net_default.dns

然后dns解析记录添加txt记录default._domainkeyName,内容为以上cat数据