Docker安装Mailcow自建域名邮箱

几乎所有市面上的免费邮箱服务,都是以牺牲你的隐私和数据为代价,利用你的大数据来进行广告行为分析来盈利,而且免费邮箱都有邮箱数量,强制绑定手机号等等限制,所以为了保护我们的数据隐私以及创建无限数量邮箱,我们可以自己自建邮箱服务。

服务器准备

按照官网的说法,推荐的最小配置要求如下:

Resourcemailcow: dockerized
CPU1 GHz
内存最低 6 GiB + 1 GiB swap (实际测试 4 GiB 内存也足够)
硬盘20 GiB (不包含邮件的占用)
系统x86_64

并且从防火墙放行这几个 TCP 端口:

服务协议端口容器名
Postfix SMTPTCP25postfix-mailcow
Postfix SMTPSTCP465postfix-mailcow
Postfix SubmissionTCP587postfix-mailcow
Dovecot IMAPTCP143dovecot-mailcow
Dovecot IMAPSTCP993dovecot-mailcow
Dovecot POP3TCP110dovecot-mailcow
Dovecot POP3STCP995dovecot-mailcow
Dovecot ManageSieveTCP4190dovecot-mailcow
HTTP(S)TCP80/443nginx-mailcow

请注意,因为垃圾邮件滥用的原因,很多国外的 VPS 商家并不允许架设邮件发送服务器,并且默认 25 端口的出口方向是屏蔽的,请自行咨询厂商。

设置 DNS 解析记录

假设邮箱服务器需要使用域名 mail.example.com,想搭建 `username@example.com` 的邮箱;

服务器 IPv4 为 192.0.2.25,IPv6 为 2001:db8::25,那么请预先做好如下解析:

域名解析类型解析值
mail.example.comA192.0.2.25
mail.example.comAAAA2001:db8::25
example.comMX10 mail.example.com.
example.comTXT“v=spf1 mx ~all”
_dmarc.example.comTXT“v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;”
autodiscover.example.comCNAMEmail.example.com.
autoconfig.example.comCNAMEmail.example.com.

注意:某些 DNS 厂商的控制面板添加 MX 和 CNAME 记录时不需要输入最后的点号,添加 TXT 记录时不需要最前面和最后面的引号。

另外需要联系你的 VPS 厂商,设置 PTR 记录,即 IP 反向解析,请设置 192.0.2.252001:db8::25 的 PTR 记录为 mail.example.com. 提高邮件到达率。

安装 Mailcow

安装依赖工具

1
yum install -y git openssl curl gawk coreutils grep jq

拉取项目代码

1
2
git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized

生成配置文件,请注意使用 FQDN (比如 mail.example.com) 作为 hostname:

1
bash generate_config.sh

按照提示输入自己的需求后即可生成好配置文件 mailcow.conf,如有需要可以自己修改这个文件。

官方提供的docker-compose.yaml有些镜像由于网络原因拉不下来,我在网上找了国内网络可以拉取的对应镜像,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
[root@localhost mailcow]# cat docker-compose.yml |grep -B2 image

unbound-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/unbound:1.24
--

mysql-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/mariadb:10.11
--

redis-mailcow:
image: docker.1ms.run/library/redis:7.4.6-alpine
--

clamd-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/clamd:1.71
--

rspamd-mailcow:
image: ghcr.io/mailcow/rspamd:2.4
--

php-fpm-mailcow:
image: ghcr.io/mailcow/phpfpm:1.94
--

sogo-mailcow:
image: ghcr.io/mailcow/sogo:1.136
--

dovecot-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/dovecot:2.35
--

postfix-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/postfix:1.81
--

postfix-tlspol-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/postfix-tlspol:1.0
--

memcached-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/memcached:alpine
--
- sogo-mailcow
- rspamd-mailcow
image: ghcr.io/mailcow/nginx:1.05
--
unbound-mailcow:
condition: service_healthy
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/acme:1.94
--

netfilter-mailcow:
image: ghcr.io/mailcow/netfilter:1.63
--

watchdog-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/watchdog:2.09
--

dockerapi-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/dockerapi:2.11
--

olefy-mailcow:
image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/ghcr.io/mailcow/olefy:1.15
--

ofelia-mailcow:
image: docker.1ms.run/mcuadros/ofelia:latest

然后拉取 Docker 镜像并启动

1
2
docker compose pull
docker compose up -d

耐心等待几分钟后即可访问 https://mail.example.com/admin 默认用户名 admin 默认密码 moohoo,建议立马修改并开启 2FA 两步验证确保安全。

添加域名和邮箱

进入 Mailcow 后台后,我们可以在顶部的 E-mail > 配置 里添加域名

按照自己的要求填入各种设置:

如果需要立马生效 Web 客户端,可以选择 Add domain and restart SOGo

开启 DKIM 并添加 DNS 记录

开启 DKIM 后邮件发信到达率更高,你可以登录 Mailcow 后台后在 系统 > 配置 > 选项 > ARC/DKIM keys 查看你域名的 dkim 记录值:

右边那一串 v=DKIM1;k=rsa;t=s;s=email;p= 的 2048 位字符即你的 DKIM 值,如果未开启,可以在下方输入域名,选择 2048 位,然后点 + Add 按钮添加

默认添加完域名后即开启了 DKIM,且 Selector 设置为 dkim,然后我们需要添加如下 DNS 记录:

域名解析类型解析值
dkim._domainkey.example.comTXT“v=DKIM1;k=rsa;t=s;s=email;p=blablablablablabla”

某些 DNS 厂商的后台可能无法直接添加 2048 位 DKIM 的 TXT 记录,因为 TXT 类型的 DNS 记录最大长度为 255 个字符,那么请手工截断成两个 TXT 记录,第一个需要 255 个字符,第二个记录为剩下的字符串

添加邮箱用户

我们可以在 Mailboxes 这个 tab 里选择 +Add mailbox 按钮添加用户:

按要求提示填写即可:

测试邮件

我们使用刚开的用户登录 Mailcow 自带的 SOGo,默认情况下地址为 https://mail.example.com

登录之后可以测试是否能正常收发邮件:

发邮件:

收邮件:

想看邮件分数可以在 mail-tester.com 发送一封 Plain Text 格式的测试邮件,稍等片刻后即可查看你的邮件分数,可以按照他的提示来修改以提高分数,避免发送邮件被放到垃圾邮箱:

Thank you for your accept. mua!
-------------本文结束感谢您的阅读-------------