搭建自己的邮件服务器原本是学校计网大作业的要求,我分析了下还挺有价值做的就好好搞了一下。顺便还用kotlin Multiplatform 框架搓了一个邮件客户端(已开源)。
准备:
邮件服务器:服务器至少空余内存1G左右。如果要使用发邮件功能请确认25端口是否开放。
邮件客户端:windows10以上,100MB存储空间。
一.邮件服务器——Mailu
介绍
Mailu 是一个模块化的邮件服务器套件,包含了一个完整的邮件堆栈(SMTP, IMAP, POP3, Webmail, 反垃圾邮件, 杀毒等)。 它是一个强大、灵活且易于部署的开源邮件解决方案,它基于 Docker 容器技术,让搭建自己的邮件系统变得前所未有的简单。 它的优点: 开源免费: 无需授权费用。 基于 Docker: 部署简单,易于维护和升级。
笔者是在阿里云的ubuntu服务器上部署的,所以之后的命令行代码可能视不同的Linux服务器有略微不同。
安装Docker和Docker-Compose
更新软件包列表:
1 | sudo apt update |
安装Docker:
1 | apt install docker docker-compose |
启动并启用Docker服务:
1 | sudo systemctl start docker |
验证安装:
1 | docker --version |
这种方法简单快捷,但可能安装的Docker版本不是最新的。
访问Mailu官网获取Docker-Compose下载文件
官网下载地址:https://setup.mailu.io/
具体配置可以参考这个视频:https://www.bilibili.com/video/BV15Z4y1F7uD/
若想快速搭建,只需修改图中几个配置(本站所设置)即可:
第一步——初始化配置


第二步——选择功能

这里包括客户端主题和杀毒功能。
主题按需选择,杀毒按默认配置就行,开启后比较吃RAM。
第三步——将 Mailu 对外开放

下载文件
填写完成完成后即可提交,网站会生成配置文件,根据所给的命令行复制粘贴即可

1 | mkdir /mailu |
1 | cd /mailu |
1 | wget https://setup.mailu.io/2024.06/file/***/docker-compose.yml |
如果下载不成功,命令行报错出现网络问题,要修改你Linux系统的DNS解析配置文件resolv.conf
Docker在拉取镜像或访问外部资源时依赖DNS解析。如果默认DNS无法正确解析域名,新增的可靠公共DNS可以确保域名解析成功,从而避免网络错误。
增加 DNS 服务器 8.8.8.8
由于系统使用 systemd-resolved,推荐通过修改 /etc/systemd/resolved.conf 来配置全局 DNS。
编辑配置文件:
1 | sudo nano /etc/systemd/resolved.conf |
找到 [Resolve] 部分,修改或添加 DNS=行,并取消注释(8.8.8.8):

重启 systemd-resolved 服务以应用更改:
1 | sudo systemctl restart systemd-resolved.service |
修改docker-compose.yml端口映射
如果有错误信息显示:
1 | ERROR: for mailu_front_1 Cannot start service front: driver failed programming external connectivity on endpoint mailu_front_1 (9cf6197a78ecb730d449082d4352cc13d711689a979e50ffd4d0db8f151b9092): Error starting userland proxy: listen tcp4 0.0.0.0:443: bind: address already in use |
说明Docker 无法启动 Mailu 的 front 服务,因为 443 端口(HTTPS)已被占用。
还有80端口(HTTP)也会被占,所以我们要通过修改docker-compose.yml端口映射来解决端口冲突。
如果没有像笔者一样有部署网站需求也没有报该错误可以跳过此步骤。
笔者使用finalShell里自带的文本编辑器修改配置如下图:

将Docker的80端口指向本机的9080端口,将443端口指向本机的8443端口,这个8443端口作为Https请求的端口,后面需要用到!!!
修改mailu.env
在mailu.env里将时区TZ改成Asia/Shanghai
将你的服务器真实ipv4地址暴露给mailu
1 | REAL_IP_HEADER=X-Real-IP |
1 | TZ=Asia/Shanghai |

配置Mailu
添加邮箱域名DNS解析
笔者是阿里云买的服务器实例,所以去阿里云域名解析添加了邮件服务器作为A记录解析

添加Nginx反向代理
笔者一样因为建站等原因80与443端口被占,需要在Nginx配置文件最后加上如下代码实现反代
这里的8443就是之前在Docker里边修改的端口,如未修改请替换成443。
1 | server { |

启动Mailu
使用cd /mailu进入mailu文件夹,启动mailu
1 | # 运行mailu |
然后创建管理员账户
1 | docker compose -p mailu exec admin flask mailu admin admin 邮件域 "密码" |
然后就可以进入web管理员界面,添加用户了。


至此,你就可以用创建的用户或者管理员账号收发邮件了

再次提醒发邮件需要开放25端口,笔者向所用云服务商阿里云申请开放多次未成功!!!

二.邮件客户端——MyMail
有了网页端还不够,笔者自己手搓了一个客户端并开源了,详情介绍见项目地址。
项目地址:lonelymeko/MyEmail: 我的kotlin multiplatform入门项目——邮箱客户端
在release下载即可,有最基础的添加账户、查看邮件、发送邮件等功能。
使用截图
查看邮件、侧边栏可以切换用户

添加用户

撰写邮件
