绕过25端口搭建自己的邮件服务器

最近整了台小鸡,正好又有自己的域名,于是心血来潮想搭一个邮件服务器。

前言

前几天也搜索过相关教程,发现要搭建邮件服务器需要先开启25端口,很不巧的是,目前大部分服务商都不允许放行25端口,所以只能另寻他法。
经过与AI的多轮探讨,最终决定采用邮件中转的方式来绕过25端口的限制。

选择中转服务

这里我个人推荐Brevo,上手较快,使用起来简单,而且免费额度较为宽松,每天能发送300封邮件,对于个人自建的服务器来说完全够用。

注册好以后进入SMTP&API,点击页面的 Generate a new SMTP key 按钮创建一个 API Key,并保管好备用。



安装 Postfix

以 Debian 为例

1
sudo apt install postfix

这时,会弹出如下的窗口,直接选择 Internet with smarthost 然后回车。

下一步到这里,把输入栏中的文本删完,并填入你邮件服务器的域名,比如 admin@example.com 就填 example.com 然后回车。

下一步是填 SMTP 服务器,直接删掉原有的文本,填上 Brevo 的 [smtp-relay.brevo.com]:587 然后回车。

至此, Postfix 安装完成。

配置 Postfix

首先我们需要创建一个登录凭证

1
sudo vi /etc/postfix/sasl_passwd

并往里面写入如下内容

1
[smtp-relay.brevo.com]:587 Brevo的登录用户:Brevo的API

其中登录用户是在SMTP&API中的Login字段,会有一个类似于 114514abc19@smtp-brevo.com 的邮箱地址。

API就是刚刚获取到的 API Key.

然后使用以下命令将凭证转为数据库格式,并限制权限。

1
2
3
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd.db

接下来创建邮件服务器需要的证书,这里我们直接使用 Let's Encrypt 通过 Certbot 获取免费证书。

1
2
3
4
sudo apt install certbot
# 先关闭 Postfix 服务
sudo systemctl stop postfix
sudo certbot certonly --standalone -d 你的服务器域名

接着会出现几个选项让你选择,全选择Y即可,接着就会签发一个3个月有效期的证书,并给出路径。
/etc/letsencrypt/live/你的服务器域名/fullchain.pem
/etc/letsencrypt/live/你的服务器域名/privkey.pem

接下来编辑/etc/postfix/main.cf,将smtpd_tls_cert_file项替换为/etc/letsencrypt/live/你的服务器域名/fullchain.pem
smtpd_tls_key_file项替换为/etc/letsencrypt/live/你的服务器域名/privkey.pem

并在文件末尾添加以下内容

1
2
3
4
5
6
7
8
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth

编辑/etc/postfix/master.cf并按照图示取消对应的注释

启动 Postfix 服务

1
sudo systemctl start postfix

至此,Postfix服务配置完成,使用以下命令检查是否正常运行。

1
sudo ss -tuln | grep 587

安装 Dovecot

1
sudo apt install dovecot-core dovecot-imapd dovecot-pop3d

编辑/etc/dovecot/conf.d/10-master.conf,找到postfix相关字段,并取消对应的注释。

重启 Dovecot 和 Postfix 服务

1
2
sudo systemctl restart dovecot
sudo systemctl restart postfix

测试发送

安装mailutils

1
sudo apt install mailutils 

发送邮件

1
echo "This is a test email." | mail -s "Test" 你的个人邮箱(qq邮箱、网易邮箱之类的)

如果没有问题的话,你的邮箱会收到一封主题为Test的邮件。

配置电子邮件路由和 IMAP 服务

因为25端口无法使用,所以我们只能使用第三方的imap服务做中转,同时需要配置一下电子邮件路由,将收到的邮件转发到你的个人邮箱。

配置电子邮件路由

为了方便我们直接使用Cloudflare提供的电子邮件路由服务,不配置路由的话其他人无法将邮件发到你的邮箱。

直接重定向到QQ邮箱即可。

配置 IMAP 服务

这里我们直接用qq邮箱进行配置,进入QQ邮箱的个人账号设置,找到安全设置,然后开启POP3/IMAP/SMTP/Exchange/CardDAV 服务,接着创建授权码,保留备用。

使用 Thunderbird 客户端进行连接

Thunderbird 是一款开源免费的邮箱客户端,很适合用来连接我们的邮箱服务器。

添加账号

填入你的电子邮件地址,比如admin@example.com,这时候会开始查找配置,不出意外的话会提示未找到配置,这时候我们点击手动配置,开始正式配置。

配置收件服务器

如下图所示,协议IMAP保持不变,服务器改成imap.qq.com,端口993,安全性SSL/TLS,身份验证用普通密码,用户名是你配置IMAP服务时用的QQ邮箱地址,密码是上面拿到的授权码。

配置发件服务器

如下图所示,服务器地址填你的服务器域名,安全性STARTTLS,端口587,验证方式普通密码,用户名是你服务器的登录用户名,密码是服务器登录用的密码,建议创建一个普通用户进行登录。

PC 端操作

PC端下操作和移动端有些差异,在配置以后需要点击高级设置,然后点击确定

这会跳转到一个新页面,让你输入IMAP服务器的授权码,然后勾选记住密码。

输入以后点击确定就配置好了

SMTP服务器则是在发件的时候触发密码输入,这时候需要输入Linux服务器的用户密码。输入以后保存密码,即可正常发送。

设置过滤

至此,我们的邮件服务器已经搭建完成,但是接入了QQ邮箱的IMAP以后,连同QQ邮箱的收件箱也一起接收过来了,这时候我们可以设置过滤条件。QQ邮箱或者Thunderbird客户端上均可设置,这里直接以QQ邮箱为例。

首先,我们在QQ邮箱的主界面侧边栏新建一个文件夹,名字随便起。接着进入设置,找到收信规则,添加规则,把指定收信人的信件移动到刚刚创建的文件夹里。

配置好以后,收到的信就可以直接在客户端的文件夹中过滤出来,如果没找到的话重启客户端看看。

Enjoy it!

至此,邮件服务器已经搭建完成,快去和朋友发邮件吧!