写在前面

最近原先租的vps要到期了,乘此机会换个更好一点的,偶然刷到可以用服务器创建自己的域名邮箱,就心动了,了解了一下主流的几个创建方法,Mailcow很简单但是配置要求很高,居然要6g内存,于是就相中了轻量化但五脏俱全的Mailu,仅需1g就能运行,结合了诸位大佬的教程,摸爬滚打了几天终于整出来了!

准备工作

  • 检查25端口是否可用
  • 安装docker与docker-compose

检查25端口是否可用

在开始前请先使用telnet测试25端口是否可用
安装telnet

1
apt install telnet

使用下面两个随便一个测试

1
2
telnet smtp.qq.com 25
telnet smtp.google.com 25

若结果类似于如下,结果为220即为可用

1
2
3
4
5
root@racknerd-xxx:~# telnet smtp.google.com 25
Trying 2607:f8b0:4023:c0d::1b...
Connected to smtp.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP d9443c01a7336-1fac16c09f5si56551935ad.584 - gsmtp

若不是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 的存储库
    1
    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
    验证Docker是否安装成功
    1
    sudo docker run hello-world
  • 安装docker-compose
    1
    2
    3
    curl -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,也就是可以在网页上直接发邮件,选项中的roundcubesnappymail是网页主题,自己按需选择
    下面五项是功能选择,按照内存大小选择:

  • 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填写你的服务器公网ip
    Subnet of the docker network.容器内的IP地址段,一般默认
    Public hostnames邮箱网站域名

填写完成完成后即可提交,网站会生成配置文件,根据步骤完成Step 1 - Download your configuration files

检查配置文件

完成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
2
3
4
5
6
7
8
9
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header WL-Proxy-SSL true;
proxy_set_header X-Forwarded-For $remote_addr;
client_max_body_size 64M;
proxy_pass http://x.x.x.x:8443;
# x.x.x.x为你的服务器真实ipv4地址,8443映射的是443的ssl端口
}

更改配置文件

修改完nginx后,也需要将之前生成并下载的配置文件docker-compose.yml中的内容更改
将其中的端口号替换为没有被占用的端口号,修改ports内容

1
2
3
4
5
ports:
- "x.x.x.x:8080:80"
# 原为"x.x.x.x:80:80"
- "x.x.x.x:8443:443"
# 原为"x.x.x.x:443:443"

还需要将mailu.env中的其中两项修改

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

配置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 邮件域 "密码"

访问你所设置的邮箱域名,进入mailu的webui,使用刚刚设置的管理员账号密码登录admin面板,在左边栏选择邮件域

选择最左边的选项,如图

进入域详细信息,点击重新生成密钥,生成一系列的dns解析信息,可以根据下列信息前往自己的域名服务商添加dns解析,2024.06版本新增了Download zonefile选项,可以直接下载下来再前往域名提供商直接导入即可,非常方便,如果之后dkim有问题可以将导入后的dkim的dns解析记录的引号删除

检验能否发送邮件

进入网络邮箱,给自己的邮箱发送消息并回信,查看能否收发邮件
也可以使用mail-master确认邮箱质量

现在,你就拥有属于自己的邮箱啦!

感谢CTmHwmwmeinverne晓白等各位大佬的教程!