使用Mailu.io搭建基于Docker的域名邮箱

 

Mailu.io是一款免费开源且性能强大、功能丰富的域名邮箱系统。它基于Docker, 具有部署简单,可移植性高,备份方便等多种优势。之前,我们介绍过Poste邮箱系统的搭建;Poste已经很久不再更新了,而Mailu则是Poste的升级版,一直稳定更新。

今天,我们就来介绍如何搭建并使用Mailu.io域名邮箱。类似的域名邮箱系统,我们还推荐iRedMailZimbra, 您可以自行比较并选择喜欢的程序。本文作者为香菇肥牛,原文链接为https://qing.su/article/mail-hosting-with-mailu-io.html, 转载需注明原文链接。

 

1, 系统环境要求

由于Mailu基于Docker, 因此几乎可以在任何版本的Linux发行版上安装使用。安装前,请确保您的服务器有2 GB的内存,并拥有一个独立IP地址。

在安装之前,您需要确保您的VPS的25端口是开放的。您可以在您的VPS上执行下面的命令来测试25端口是否开放。

1
telnet smtp.aol.com 25

如果看到类似下面的回显,则说明端口是开放的:

1
2
3
4
Trying 74.6.141.50...
Connected to smtp.aol.g03.yahoodns.net.
Escape character is '^]'.
220 smtp.mail.yahoo.com ESMTP ready

如果显示超时,说明25端口不开放;您需要向主机商申请开放25端口,或者更换一台VPS.

本文中,我们将在一台Ubuntu 20.04 LTS 64 bit操作系统的VPS中安装。在其他操作系统中的安装步骤类似。

 

2, 主机名与DNS设置

设置好主机名(服务器名, Hostname)是所有邮件服务器必不可少的一步,否则在发信时将会遇到各种错误。

如果您的域名为example.com, 那么我建议您的邮件服务器主机名可以设置为mail.example.com或者mx.example.com.  如果您不知道如何设置服务器名,请参考我们的图文视频教程

下文中,我们将以mx.qing.su作为主机名介绍整个系统的部署。当您设置好主机名之后(以mx.qing.su为例),在SSH中执行命令:

1
hostname

此时您应当看到系统显示mx.  如果系统显示mx.qing.su, 说明主机名设置错误,请重新设置。

在SSH中执行命令:

1
hostname -f

此时您应当看到系统显示mx.qing.su.

设置好主机名之后,您还需要设置DNS解析记录。DNS记录的设置分为两部分,一部分需要在搭建邮箱之前设置,另一部分(DKIM)在搭建邮箱之后设置。我们先介绍第一部分。假设您的服务器IP地址为88.88.88.88, 那么您需要到您域名的DNS服务提供商处,添加下面的五条记录:

  • 将域名qing.su设置任意一条A记录或者ALIAS记录,值为任意。如果您不使用该域名做网站,您可以设置一条A记录,解析到127.0.0.1.  请注意,根域名不能设置CNAME记录。
  • 将域名mx.qing.su设置A记录,解析到88.88.88.88
  • 将域名qing.su设置MX记录,优先级为10,解析值为mx.qing.su
  • SPF: 将域名qing.su设置TXT记录,解析值为”v=spf1 mx ~all”
  • DMARC: 将域名_dmarc.qing.su设置TXT记录,解析值为”v=DMARC1; p=none; pct=100; rua=mailto:admin@qing.su”

然后,您需要到您的VPS服务商处,为您的IP地址设置逆向DNS记录(Reverse DNS, PTR), 将88.88.88.88解析到mx.qing.su.

设置好这些之后,我们就可以开始部署Mailu域名邮箱了。

 

3, 安装Docker与Docker Compose

前面说过,Mailu基于Docker.  这里我将以Ubuntu 20.04 LTS操作系统为例,简要记录Docker与Docker Compose的安装。如果您对Docker非常了解,可以跳过这一部分。如果您使用的是其他操作系统,可以在这里(https://docs.docker.com/engine/install/, https://docs.docker.com/compose/install/)找到对应的安装步骤。

安装Docker Engine:

1
2
3
4
5
6
apt-get update && apt-get upgrade
apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

安装Docker Compose:

1
2
curl -L "https://github.com/docker/compose/releases/download/1.27.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

 

4, 配置Mailu服务器

Mailu服务器提供了一个自动生成配置文件的网页,非常方便。因此,我们将使用这个网页来生成配置文件。它的地址是https://setup.mailu.io/

打开网页后,第一步是选择版本与Docker管理方式。这里我们选择最新版1.7, Docker管理方式选择Docker.

设置Mailu版本与Docker

第二步,需要设置路径与域名信息。请按照下图填写,并替换为您的域名。请注意,Main mail domain and server display name应该填写您的根域名,比如我这里是qing.su; 而Linked Website URL, 则填写您的邮件服务器主机名,这里我们填写https://mx.qing.su.  在TLS certificates这里,我们选择letsencrypt, 系统将会自动帮我们生成Let’s Encrypt证书。您也可以选择自己提供证书。下方的Enable the admin UI请务必勾选,否则系统将不会安装Web管理面板。

设置Mailu路径与管理员信息

第三步,选择网页邮箱的面板。这里可以选择Roundcube和Rainloop, 您可以根据个人偏好来选择。我这里推荐Rainloop,它更美观,且对移动端的适配更好。Rainloop支持中文显示。下面的三个选项分别是杀毒、WebDAV、邮件代收,您可以根据自己的需要来勾选。

第四步,配置IP与主机名。请在IP listen address中填写您服务器的IP地址,比如88.88.88.88.  第二行是设置Docker的子网,一般保持默认即可。IPv6建议不启用。Unbound resolver建议启用。最后一栏,填写您的服务器的长主机名,我这里是mx.qing.su.

配置IP地址与主机名

第五步,也是最后一步,选择数据库。这里我们选择最简单的Sqlite即可。您也可以选择其他的数据库,比如MySQL或者PostgreSQL.

选择数据库

选择完毕后,点击Setup Mailu, 系统就会自动帮你生成好配置文件了,如下图。

系统生成的Mailu配置文件

 

5, 运行Mailu服务器

按照上述步骤生成好Mailu配置文件,就可以运行Mailu服务器了。回到SSH, 执行:

1
2
mkdir /mailu
cd /mailu

然后找到之前那个页面生成的配置文件链接,下载到/mailu文件夹中:

1
2
wget http://setup.mailu.io/1.7/file/edda7279-qing-su-qing-su-04773fdf23f9/docker-compose.yml
wget http://setup.mailu.io/1.7/file/edda7279-qing-su-qing-su-04773fdf23f9/mailu.env

最后,使用Docker compose运行。

1
docker-compose -p mailu up -d

初次使用,系统将会下载几个Docker镜像,需要数分钟的时间。等系统提示完成后,Mailu就处于运行状态了。

部分朋友在初次运行Mailu的时候会遇到类似于下图的报错:

Mailu运行报错

如果遇到这种情况,您可以编辑docker-compose.yml文件,删除掉所有绑定了[::1]地址与端口的行,然后重新运行上面的命令即可。

 

6, 使用Mailu域名邮箱

在第一次登录Mailu服务器后台面板之前,需要新建一个管理员账户。在SSH中执行:

1
docker-compose -p mailu exec admin flask mailu admin hello example.com qing.su

这样,我们就创建了一个用户名为hello@example.com, 密码为qing.su的管理员账户。请替换为您需要的值。

创建完毕,您就可以在浏览器中访问https://mx.qing.su/admin登录您的管理员面板了,如下图。

Mailu后台面板

点击左侧Mail Domains, 就能管理我们的邮箱域名。在域名管理界面,点击右上角New domain, 即可添加域名。点击下图中的红框部分,即可添加用户;点击绿框部分,则进入域名详情页。

管理邮箱域名

点击上图中的红框,进入用户管理界面,如下图:

添加邮箱用户

这里我们可以输入邮箱前缀,密码,姓名。下方的Features and quotas可以设置邮箱容量,并且可以设置是否允许IMAP和POP3客户端登录收信。设置完毕后,点击Save, 就添加好了用户。

在域名管理界面,点击之前那张图的绿框部分,则进入了域名详情页。我们点击右上角的Generate keys, 即可生成DKIM记录。如下图。

根据上图的信息,您需要去您的DNS服务器运营商设置域名的DKIM记录。比如,以我的qing.su域名为例,我需要设置下面的DKIM记录:

  • 将域名dkim._domainkey.qing.su设置TXT记录,解析值为”v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDK8nX8NbQ/16bb7zUqZif39emugOQpBDTXeLTqKhmrhPHFt5RgrDj9ibL18ovXKsQONjXZ+qNE407+KQZWcVLFvCQ6jtl1ojSfnJGeltGRqgfjw0nIAFQ9P6UVO5fiyrnxR4NZ+MDKvsv33NMgJxpEH6O8hQ/K2mDM+mDcIIbOwQIDAQAB”

这样,我们就完成了全部的DNS设置。此时,您的域名邮箱已经全部搭建并配置完毕,可以收发信了。

访问https://mx.qing.su就会自动跳转到网页邮箱的登录界面。如果您在配置时选择了Rainloop, 则第一次登录时可以在界面上选择语言,比如简体中文。

我们使用mail-tester.com测试发信,可以看到评分为满分10分。

Mail-tester邮件测试

 

 

综上,我们使用了Mailu.io这款基于Docker的多功能的邮件服务器程序,在VPS上搭建了属于自己的域名邮箱。如果您有任何疑问,欢迎在这里留言,我将尽力解答。如果您喜欢这篇文章,欢迎转发给朋友们。

本文作者为香菇肥牛,原文链接为https://qing.su/article/mail-hosting-with-mailu-io.html, 转载需注明原文链接,谢谢。

32 thoughts on “使用Mailu.io搭建基于Docker的域名邮箱”

  1. 您需要到您的VPS服务商处,为您的IP地址设置逆向DNS记录(Reverse DNS, PTR), 将88.88.88.88解析到mx.qing.su.
    请问这个自己可以解析吗?必须得vps服务商吗?

    Reply
  2. 如果webmail要在内网使用,IP也是内网的,这种的设置了能用吗?我在CentOS下都安装好了,没有错误,但开网页要进入管理员配置界面的时候跟我说页面载入出错,连接失败。

    Reply
    • 我也是,重装了差不多10次,也是连接失败。我找懂的人帮我看了,是ssl证书配置失败。他说,他从前搭建的时候也是,而且反复重装会导致反复请求ssl造成你的域名在一周内被停止申请ssl证书资格。前两天我又搭建,又是ssl配置失败。然后我找这个人帮我弄,他重新生成了配置,和作者博文中的配置不完全一样,一次性搞定了。于是这个vps再也不敢碰了,就这样吧。

      Reply
  3. 请问博主全程安装你的步骤操作的,到最后打开网页提示403这是什么问题呢?

    Reply
    • 1.985那一项不用管,是和你邮件内容有关的,无视即可。3.558那项说明你的服务器IP地址在Spamhaus SBL黑名单里面,这个非常关键,建议你换个服务器或者换个IP。

      Reply
  4. 还有一个问题想请教一下博主大大,如果我想把这个搭建的邮箱当作smtp来用,放到wordpress里面,smtp服务主机我应该填的是类似mx.qing.su这个么,SMTP 安全ssl,SMTP 端口465,SMTP 密码是否是填写登陆邮箱的密码?(qq邮箱会有授权码,但是我们搭建的这个我似乎没有看到)希望能抽空回复,感谢!

    Reply
  5. 删除掉所有绑定了[::1]地址与端口的行,然后重新运行上面的命令. 还是报一样的错,该怎么解决

    Reply
  6. 博主您好,我按照你的文档搭建完成之后,使用smtp协议调用邮件服务器发送邮件的时候,收到的邮件发送人是一个不知道哪里来的邮箱,但是这个邮箱里面有我服务器的编号信息(我之前的hostname是服务器编号),已经按照文档改过了,这种问题博主有碰到吗

    Reply
  7. 博主你好,我用这个自建后,使用本地或其他测试都可手法邮件,但是放在php的某些插件上无法发送,你有遇到过这种问题吗

    Reply

Leave a Comment