9 min read

在Ubuntu上快捷搭建自己的电子邮件服务器

告别昂贵而繁琐的Mailgun或Mailchip,对于个人业务需求完全可以采用自己的邮件服务器作为发信服务,尤其是VPS服务已经接近免费价格的今天。

我不止一次折腾了第三方邮件服务商的集成、开户、保持一段时间,但业务没起来之前就开始付费好像又不太划算,如果不升级pro套餐又无法使用一些增值功能,大部分的付费电邮服务为了盈利都将规则设置得非常“恶心”,但也可理解。

基于个人服务器的电邮发件服务是最适合个人业务项目或发件需求量不大、或业务初期使用的解决方案,一个5USD的VPS服务器可能就完全足够用来发送业务信件了,甚至还可以支持数个自己的小型项目,完全自己使用,只要IP干净也无需单行黑名单IP问题。

今天在为本站测试发件服务时,发现Mailgun已经许久没有续费了,已经无法正常工作,我的发件需求并不大,但想到每月要为此支付10美金或20美金,真是太不划算了,于是这次决定找到一个可行的解决方案,并将这个安装部署过程记录下来,以便于以后再次安装或维护时使用。

想起邮件服务器的,我不止折腾过N次,但久了不使用,也没有记录下来就忘却了,实在得不偿失,因此从最近开始,我开始整理以前的一些技术笔记和工作笔记,至少以后可以用上。

Mail-in-a-Box

Mail-in-a-Box 是一个开源的解决方案,旨在提供一个简单的部署步骤即可将自己的服务器或轻量级服务器部署为自己的电子邮件发件服务器,整个使用过程非常简单,官网声称无需具备技术专家的资格即可完成配置。

目前的最新版本是 v69b-20240723发布,Mail-in-a-Box 套件中还包含了常用的UI界面 Roundcube、Nextcloud、和一个邮件控制面板界面。

这个套件可以让你通过WEB控制台或通过 HTTP API 来创建或管理电子邮件账户、邮箱别名、备份等设置。

GitHub - mail-in-a-box/mailinabox: Mail-in-a-Box helps individuals take back control of their email by defining a one-click, easy-to-deploy SMTP+everything else server: a mail server in a box.
Mail-in-a-Box helps individuals take back control of their email by defining a one-click, easy-to-deploy SMTP+everything else server: a mail server in a box. - mail-in-a-box/mailinabox

操作系统

为了便于部署,我准备了一台 运行Ubuntu 22的轻量级 Cloudcone VPS,具有1核心和1GB内存以及20GB硬盘,$15.99 /每年,我认为完全足够运行这项服务。

目前 Cloudcone 正在提供非常低价格的 VPS 服务器解决方案,同时具有 IPV4和IPV6网络,支持25端口发信,有需要的你也可以前往申请。

💡
目前仅支持 Ubuntu 14.04, 18.04, or 22.04 版本安装此套件

系统准备

再开始之前,我们需要先设置主机名等做一些能让我们顺利发信的配置准备:

  1. 设计主机名到 pop909.investravis.com,这是作为我们的邮件服务器的主机名
hostnamectl set-hostname pop909.investravis.com
  1. 在 CloudCone 服务器管理界面,设置IPv4的 rDNS 到 pop909.investravis.com
  1. 选择邮箱域名 message.investravis.com 将作为我们电子邮件的域名
  2. 完成必要的DNS设置

鉴于上述的几个域名,我们需要在DNS提供商处添加DNS记录,来保证安装后邮件服务器可以正常运行和发信,这些也是根据电邮服务器配置要求和电邮服务器安全策略标准实施建议的。

# 这里假设你的服务器IP地址为 1.1.1.1
message.investravis.com IN A 1.1.1.1
pop909.investravis.com IN A 1.1.1.1
message.investravis.com IN MX 10 pop909.investravis.com
_dmarc.message.investravis.com IN TXT "v=DMARC1; p=reject; sp=reject; adkim=s; aspf=s;"
message.investravis.com IN TXT "v=spf1 ip4:1.1.1.1 -all"

一共需要创建5条DNS记录,请你替换对应的域名和服务器IP地址为你自己的,才能确保正常工作。

💡
如果你打算使用一个全新的域名来设置这台服务器,那么你可以采用官方文档建议的 托管 DNS 到邮件服务器的操作,这样会为你省却 DNS 记录创建步骤。

查阅官方文档说明:

Mail-in-a-Box Setup Guide
Setup instructions for Mail-in-a-Box. Take back control of your email with this easy-to-deploy mail server in a box.

安装脚本

完成系统安装之后,使用Shell登陆你的服务器,然后执行下列一键安装脚本进行安装:

💡
如果你希望更改默认的邮箱数据库保存路径,你可以在执行安装命令之前,设置一个环境变量来更改。

(可选) 设置更改存储路径的环境变量:

export STORAGE_ROOT=/your/desired/path

安装脚本:

curl -s https://mailinabox.email/setup.sh | sudo -E bash

等待系统准备完成后,将会出现提示界面:

此界面让你确认是否在全新的系统上安装,回车确认即可。

这里是创建一个默认电子邮箱,用于管理此服务器,这里我填写了一个 [email protected] 邮件作为默认邮件。

然后是配置你的服务器的主机名,输入后,确认。现在将正式进入自动化配置过程:

过程中可能还会要求配置地区、时区等,依照实际情况完成配置即可。根据你的服务器配置,这个过程需要的时间可能会更长,我的当前服务器配置共花费20分钟才完成这个过程。

设置你的默认账户密码:

只管输入,两次必须一致,然后回车确认,继续完成最后配置。

等待安装脚本执行完成,你将会看到首次访问控制面板的信息,若在此过程中出错,那肯定是你的系统版本不匹配或网络出现问题。

管理界面

当看到界面出现下列提示信息,即可通过浏览器进入到WEB管理界面,进行初始化设置并开始使用你的邮件服务啦。

使用界面上提供的地址访问你的WEB界面吧,使用之前安装时创建的默认邮箱和设置的密码登录。

默认的证书是自签名的,继续访问即可,稍后可以通过申请 Letsencrypt SSL 修复这个问题。

输入账户密码登录。

完成DNS配置

之前我们配置了部分DNS,但如果我们没有将 NS 托管到这台电邮服务器,那么我们需要再根据系统建议完成外部DNS设置。打开控制面板菜单->System->External DNS 界面,然后根据界面提示完成各个DNS记录创建即可。

完成 SSL 配置 - Letsencrypt

在完成上述 DNS配置之后,你还需要打开菜单->System-> TLS(SSL) Certificates 页面,根据需要使用的域名,查看 Provision Certificate 栏目,选择需要申请证书的域名,完成证书申请。

💡
如果你的页面并未展示 Provision Certificates 这一栏,则是因为DNS还未生效,请等待最少30分钟后重新登陆系统后再试。

安装完成后,界面将会提示已安装的域名清单,并自动应用新证书和重启服务:

用户和电子邮箱

你还可以通过管理面板菜单中提供的功能完成用户、邮箱等管理和开设。为了安全,建议你设置两步验证和防火墙规则,仅允许授权的 IP 访问你的电邮服务器。