搭建自己的邮件服务器原本是学校计网大作业的要求,我分析了下还挺有价值做的就好好搞了一下。顺便还用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
2
sudo systemctl start docker
sudo systemctl enable docker

验证安装:

1
docker --version

这种方法简单快捷,但可能安装的Docker版本不是最新的。

访问Mailu官网获取Docker-Compose下载文件

官网下载地址:https://setup.mailu.io/

具体配置可以参考这个视频:https://www.bilibili.com/video/BV15Z4y1F7uD/

若想快速搭建,只需修改图中几个配置(本站所设置)即可:

第一步——初始化配置

image-20250526184150906

image-20250526184447979

第二步——选择功能

image-20250526184921424

这里包括客户端主题和杀毒功能。

主题按需选择,杀毒按默认配置就行,开启后比较吃RAM。

第三步——将 Mailu 对外开放

image-20250526185707328

下载文件

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

img

1
mkdir /mailu
1
cd /mailu
1
2
wget https://setup.mailu.io/2024.06/file/***/docker-compose.yml
wget https://setup.mailu.io/2024.06/file/***/mailu.env

如果下载不成功,命令行报错出现网络问题,要修改你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):

image-20250515210313916

重启 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里自带的文本编辑器修改配置如下图:

img

将Docker的80端口指向本机的9080端口,将443端口指向本机的8443端口,这个8443端口作为Https请求的端口,后面需要用到!!!

修改mailu.env

在mailu.env里将时区TZ改成Asia/Shanghai

将你的服务器真实ipv4地址暴露给mailu

1
2
3
REAL_IP_HEADER=X-Real-IP
REAL_IP_FROM=x.x.x.x
# x.x.x.x为你的服务器真实ipv4地址
1
TZ=Asia/Shanghai

image-20250526191837384

配置Mailu

添加邮箱域名DNS解析

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

img

添加Nginx反向代理

笔者一样因为建站等原因80与443端口被占,需要在Nginx配置文件最后加上如下代码实现反代

这里的8443就是之前在Docker里边修改的端口,如未修改请替换成443。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 443 ssl http2;
server_name mail.lonelymeko.top;

ssl_certificate /etc/letsencrypt/live/lonelymeko.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/lonelymeko.top/privkey.pem;

ssl_protocols TLSv1.2 TLSv1.3; # 使用现代安全协议
ssl_prefer_server_ciphers off; # 允许客户端选择最佳加密套件

location / {
proxy_pass https://localhost:8443/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 重要:告诉后端是 HTTPS
}
}

img

启动Mailu

使用cd /mailu进入mailu文件夹,启动mailu

1
2
3
4
5
6
# 运行mailu
docker-compose -p mailu up -d
# 停止mailu
docker-compose -p mailu down
# 查询docker运行日志
docker-compose logs

然后创建管理员账户

1
docker compose -p mailu exec admin flask mailu admin admin 邮件域 "密码"

然后就可以进入web管理员界面,添加用户了。

image-20250526194359545

image-20250526194440757

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

image-20250526194610908

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

img

二.邮件客户端——MyMail

有了网页端还不够,笔者自己手搓了一个客户端并开源了,详情介绍见项目地址。

项目地址:lonelymeko/MyEmail: 我的kotlin multiplatform入门项目——邮箱客户端

在release下载即可,有最基础的添加账户、查看邮件、发送邮件等功能。

使用截图

查看邮件、侧边栏可以切换用户

image-20250526200353082

添加用户

image-20250526200437296

撰写邮件

image-20250526200529921



新ICP备2025018290号-1
本站总访问量