通过Mailu建立属于自己的域名邮箱
写在前面
最近原先租的vps要到期了,乘此机会换个更好一点的,偶然刷到可以用服务器创建自己的域名邮箱,就心动了,了解了一下主流的几个创建方法,Mailcow很简单但是配置要求很高,居然要6g内存,于是就相中了轻量化但五脏俱全的Mailu,仅需1g就能运行,结合了诸位大佬的教程,摸爬滚打了几天终于整出来了!
准备工作
- 检查25端口是否可用
- 安装docker与docker-compose
检查25端口是否可用
在开始前请先使用telnet测试25端口是否可用
安装telnet
1 | apt install telnet |
使用下面两个随便一个测试
1 | telnet smtp.qq.com 25 |
若结果类似于如下,结果为220即为可用
1 | root@racknerd-xxx:~# telnet smtp.google.com 25 |
若不是220.则无法继续下面的步骤,可以向你的vps提供商询问是否可以开放或干脆换一家
安装docker与docker-compose
安装docker
笔者用的是Ubuntu,因此下列内容均只适配于Ubuntu,其它系统请参考官方文档
- 卸载旧版本
1
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- 软件库安装docker
设置 Docker 的存储库安装最新的docker1
2
3
4
5
6
7
8
9
10
11
12
13# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update验证Docker是否安装成功1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1
sudo docker run hello-world
- 安装docker-compose
1
2
3curl -fsSL https://get.docker.com | bash -s docker
curl -L "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
Mailu配置在线生成
笔者安装是当前的最新版本2024.06
创建docker-compose.yml
Mailu官方给了个可以根据需求自己生成所需文件的工具
分为三部分
Step 1 - Initial configuration
Mailu storage path:
里填写Mailu的存储路径Main mail domain and server display name.
填写邮箱服务器名称,也就是@后面的内容Postmaster local part
管理员账户名称,也就是@前面的内容Choose how you wish to handle security TLS certificates
选择ssl的类型如果服务器上没有网站等其他服务会占用80和443端口,可以直接选择
letsencrypt
如果已经被占用,像笔者还建立了网站就选择
mail-letsencrypt
下面三项是详细设置每个ip最大登录次数什么的,默认就行,后面也可以调Website name
邮箱页面左上角显示的网站名称Linked Website URL
点击左上角邮箱名称跳转的链接,一般设置为邮箱主页Enable the admin UI
是否启用管理员UI,建议启用Enable the API
是否启用外接api,后面可调Step 2 - Pick some features
Enable Web email client
启用网页版UI,也就是可以在网页上直接发邮件,选项中的roundcube
和snappymail
是网页主题,自己按需选择
下面五项是功能选择,按照内存大小选择:Enable the antivirus service
启用杀毒,很吃内存Enable the webdav service
启用webdav,不清楚功能Enable fetchmail
启用邮件代收,也就是可以用第三方软件收取邮件Enable oletools
启用附件病毒扫描,比第一个吃的内存少Enable Tika
启用附件搜索Step 3 - expose Mailu to the world
IPv4 listen address
填写你的服务器公网ipSubnet of the docker network.
容器内的IP地址段,一般默认Public hostnames
邮箱网站域名
填写完成完成后即可提交,网站会生成配置文件,根据步骤完成Step 1 - Download your configuration files
- 创建mailu文件夹
1
mkdir /mailu
- 下载在线生成的Mailu的配置文件
根据你自己生成完成后的代码来,每个用户生成的路径不同1
2
3cd /mailu #进入mailu文件
wget https://setup.mailu.io/2024.06/file/每个人路径不同/docker-compose.yml
wget https://setup.mailu.io/2024.06/file/每个人路径不同/mailu.env
检查配置文件
完成step1后不要急着继续,step2都叫你好好检查了
- 检查docker-compose.yml
内部端口映射是否完整,80和443端口被占的话等会儿还要改 - 检查mailu.env
将时区TZ改成Asia/Shanghai,不过现在其实已经可以自动选择时区了,可以忽略
配置Mailu
添加邮箱域名DNS解析
笔者是在Cloudflare添加了A记录解析仅DNS,名称设置为刚刚配置文件中的Public hostnames
填写的二级域名
添加rDNS
在你使用自己的邮箱向其他邮箱发送邮件时,对面收到信会向你的服务器确认信息,如果没有设置rDNS
可能会被对方判定为垃圾邮件
关于rDNS,部分vps可以直接在管理员面板直接修改,其他的可能需要提交服务单修改,添加rDNS为自己的邮箱域名
添加Nginx反向代理
修改nginx
如果像笔者一样因为建站等原因80与443端口被占,需要在Nginx配置文件最后加上如下代码实现反代,如果是宝塔则可以创建同域名空壳网站后添加反向代理,修改配置文件如下即可
配置如下
1 | location / { |
更改配置文件
修改完nginx后,也需要将之前生成并下载的配置文件docker-compose.yml中的内容更改
将其中的端口号替换为没有被占用的端口号,修改ports内容
1 | ports: |
还需要将mailu.env中的其中两项修改
1 | REAL_IP_HEADER=X-Real-IP |
配置mailu具体信息
使用cd /mailu
进入mailu文件夹,启动mailu
1 | # 运行mailu |
运行后使用如下指令创建管理员账户
1 | docker compose -p mailu exec admin flask mailu admin admin 邮件域 "密码" |
访问你所设置的邮箱域名,进入mailu的webui,使用刚刚设置的管理员账号密码登录admin面板,在左边栏选择邮件域
选择最左边的选项,如图
进入域详细信息,点击重新生成密钥,生成一系列的dns解析信息,可以根据下列信息前往自己的域名服务商添加dns解析,2024.06
版本新增了Download zonefile
选项,可以直接下载下来再前往域名提供商直接导入即可,非常方便,如果之后dkim有问题可以将导入后的dkim的dns解析记录的引号删除
检验能否发送邮件
进入网络邮箱,给自己的邮箱发送消息并回信,查看能否收发邮件
也可以使用mail-master确认邮箱质量