使用 Mailcow 搭建自己的域名邮箱
关于 Mailcow
dockerized - 🐮 + 🐋 = 💕Mailcow是使用Docker部署的邮件服务应用
Github上提供了完整的 Demo, 自行部署前体验一下也是没问题的
Demo Administrator: admin / moohoo
部署步骤可以参考 Github 上的 Documentation, 由于基于docker, 部署起来也并不复杂
mailcow/mailcow-dockerized
mailcow: dockerized - 🐮 + 🐋 = 💕
事前准备
Mailcow还是很吃配置的, 在部署之前, 我们先确认服务器是否符合要求
参考文档:https://docs.mailcow.email/getstarted/prerequisite-system/
Minimum System Resources
首先是服务器硬件,文档给出的推荐内存是6GB, 所以推荐在 4G RAM 以上部署
RAM 不够的话只能禁用些组件了,禁用ClamAV and Solr可以节约使用内存
| Resource | mailcow: dockerized |
|---|---|
| CPU | 1 GHz |
| RAM | Minimum 6 GiB + 1 GiB swap (default config) |
| Disk | 20 GiB (without emails) |
| System Type | x86_64 |
OpenVZ, Virtuozzo and LXC 虚拟化的VPS是无法部署的
Supported OS
在主流服务器操作系统上都没问题
✅ Centos 7
✅ Debian 10, 11
✅ Ubuntu 18.04, 20.04, 22.04
⚠️ Alpine 可能有些功能会不兼容
Firewall & Ports
需要使用的端口有:25|80|110|143|443|465|587|993|995|4190
可以使用下面命令检查, 如果没有输出就是端口处于空闲状态
被占用的话,可以之后改配置文件, 如果已经装了web服务器, 例如Nginx, 之后可以反向代理
1 | ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190' |
另外有些服务商会封锁 Outbound SMTP (出方向为25端口)的流量
比如AWS,Oracle,Azure,GCP,Vultr等, 你需要先和服务器运营商联系, 解除限制
检查 Outbound SMTP 是否畅通可以使用telnet, 看到Connected没问题
需要退出telnet请按CTRL+]然后输入quit
1 | $ telnet mx1.qq.com 25 |
配置DNS 信息
在安装前我们先配置DNS, 因为这可能要过一会生效
官网文档也给出了参考配置
${MAILCOW_HOSTNAME}是你的邮件服务器域名, 例如mail.psray.net, 最少需要配置4个DNS记录
1 | # Name Type Value |
还有域名的SPF记录, 注意新增时候请不要选SPF类型
1 | # Name Type Value |
另外还可以添DKIM,DMARC,rDNS记录, 这里就不配置了
安装
Docker & Docker Compose
首先安装Docker和Docker Compose, 如果已经安装了可以跳过
1 | curl -sSL https://get.docker.com/ | CHANNEL=stable sh |
接着安装Docker Compose
1 | # On Debian/Ubuntu systems: |
从Github上clone代码, 安装mailcow时, 请确认你使用的用户umask是022
1 | $ su |
1 | cd /opt |
初始化 mailcow
输入 mail servers hostname (FQDN), 例如mail.psray.net
设置 Timezone (时区), 例如Asia/Tokyo
最后的 Available Branches, 选1就行, nightly branch是开发版本
1 | ./generate_config.sh |
配置 mailcow, 编辑文件mailcow.conf, 根据自己的实际情况修改即可
由于我的机器上已经有Web服务器Nginx了,所以我把HTTP_PORT和HTTPS_PORT改了下
1 | nano mailcow.conf |
启动 mailcow
如果最后一步报错请根据错误信息排查
1 | docker compose pull |
比如我机器上的exim4占用了25端口,可以使用systemctl禁用它

用浏览器打开 https://MAILCOW_HOSTNAME:HTTPS_PORT (如果你没改配置文件的话, 不用指定额外端口)
你应该能正常看到Web UI才对, 默认的用户名和密码是admin,moohoo

默认生成的证书文件在安装目录下的 data/assets/ssl/
用已有的替换它或者用acme生成新的证书后, 再重新执行docker compose up -d即可
像我打算用Nginx反向代理, 上面证书可以不用管了。这边贴出Nginx配置文件中比较重要部分
server_name记得加上autoconfig,autodiscover, MAILCOW_HOSTNAME替换成你的邮件服务器域名
记得把proxy_pass的端口改成的mailcow的http端口
官方文档内还有更多示例和说明, 比如Apache,HAProxy,Traefik ,Caddy的配置
1 | server_name MAILCOW_HOSTNAME autodiscover.* autoconfig.*; |
1 | location / { |
接着回到Web UI, 配置域名, 在Configuration->Mail Setup->Domains, 添加域名并重启

切换到邮箱选项卡, 添加一个新的邮箱, 比如admin@psray.netmailcow使用SOGo作为Webmail UI, 在右上方菜单, Apps->Webmail,即可进入SOGo

默认端口
mailcow使用的默认端口如下, 如果需要使用第三方邮件客户端时, SMTP和IMAP服务器地址都填写MAILCOW_HOSTNAME即可
SMTP: STARTTLS->587, SSL/TLS->465
IMAP: STARTTLS->143, SSL/TLS->993 (比起POP3, 推荐使用IMAP)
| Service | Protocol | Port | Container | Variable |
|---|---|---|---|---|
| Postfix SMTP | TCP | 25 | postfix-mailcow | ${SMTP_PORT} |
| Postfix SMTPS | TCP | 465 | postfix-mailcow | ${SMTPS_PORT} |
| Postfix Submission | TCP | 587 | postfix-mailcow | ${SUBMISSION_PORT} |
| Dovecot IMAP | TCP | 143 | dovecot-mailcow | ${IMAP_PORT} |
| Dovecot IMAPS | TCP | 993 | dovecot-mailcow | ${IMAPS_PORT} |
| Dovecot POP3 | TCP | 110 | dovecot-mailcow | ${POP_PORT} |
| Dovecot POP3S | TCP | 995 | dovecot-mailcow | ${POPS_PORT} |
| Dovecot ManageSieve | TCP | 4190 | dovecot-mailcow | ${SIEVE_PORT} |
| HTTP(S) | TCP | 80/443 | nginx-mailcow | ${HTTP_PORT} / ${HTTPS_PORT} |
其他
需要更新 Mailcow 时,运行目录下的更新脚本即可
1 | ./update.sh |
卸载
1 | docker compose down -v --rmi all --remove-orphans |
备份或还原数据库, 使用目录下的helper-scripts脚本即可
1 | helper-scripts/backup_and_restore.sh |
另外除了SPF记录, 还可以创建DKIM,DMARC的DNS记录, 增加你的邮件友好度
1 | # Name Type Value |
SRV记录(非必须)
1 | # Name Type Priority Weight Port Value |
最后找个Mail-tester,MX Toolbox之类工具看看配置是否正确, 就可以愉快的使用了