自建邮局一年后的经验之谈

近日,一则“某国外老哥关闭自我托管了23年的邮箱,转而向大厂投降”的新闻[1]引起热议。

说的是电子邮局大厂(Outlook、Gmail等)会屏蔽家庭宽带的 IP 地址,有些甚至会屏蔽一些独立公网 IP,自托管的邮箱向这些主流邮箱投送邮件,要么被拒收,要么被当作垃圾邮件,由于大部分人使用这些邮件服务商,这让自托管变得困难。

我也使用自托管邮箱,早先检查DNSBL数据库发现,的确我源服务器的IP总是在个别垃圾电邮黑名单里,通常家庭宽带运营商(ISP)默认将分配给家庭用户的公网IP都列入政策封锁列表(PBL)中,实测至少Outlook会屏蔽直接从我源服务器发出的邮件,QQ邮箱倒是来者不拒。

如果你需要使用自己的域名邮箱,一种方式是使用阿里云、Zoho之类的企业邮,有免费的,功能受到限制,需要提交一些个人信息,使用一段时间后容易收到一些广告邮件等等缺点,更重要的是:数据并不掌握在自己手里。因此,如有可能,邮箱当然还是自建的好。

自建邮局并非不可行,有避免被主流邮箱屏蔽的方法:使用中继主机。我开通了Amazon SES(主用)和Mailgun(备用)作为发件中继主机,SES每个月免费 62000封,Mailgun每个月免费1000封,两者免费版的都使用共享 IP 地址,理论上仍有可能因其他共享用户发送垃圾邮件或自己大量发件被收件方邮局屏蔽,送达率可能不如大厂的邮箱,解决办法是购买专用IP,但这半年来我没有碰到过邮件被拒收的情况,除了163邮箱莫名收不到Mailgun的邮件,163邮箱似乎会屏蔽大部分海外来件。

以上都只能申请国外的服务器,国内的服务商有SendCloud(免费10封邮件/天也不是不能用)。此外通过中继主机发送的邮件,有些收件人客户端会显示“由 xxxxxxxxx@xxx.xxx代发”字样,可能会给对方带来困惑,因此最好在Amazon SES或Mailgun上配置与发件地址同一域名下的子域作为发件域。

自建之前首先得有个域名,“.com”顶级域最好。Amazon SES的申请网上已有一篇比较详细的教程[2]。Mailgun申请比较简单,注意事项可以借鉴我之前的文章[3]。关于自建邮箱,以Postfix + Dovecot较为多见,群晖有一个易用的套件MailPlus,可以参考这篇教程[4]

搭建好后建议用mail-tester测试一下邮件健康度,主要关注域名的DKIM、SPF以及DMARC记录是否正确。反向域名解析(PTR记录)最好也要有,当然如果没有固定公网IP则无法配置这条,只能使用中继。

在自己的邮箱服务器上启用Amazon SES或Mailgun中继后,需要注意一下免费额度有哪些限制,例如SES限制:每天50000封、每秒14封、每条消息 50 个收件人、每封邮件包括附件最大 40MB,带宽上行 40MB/秒,另外有一些附件类型不受支持。需要在自己的邮箱服务器上配置这些限制,以免超额发送失败或产生不必要的扣费。

由于你服务器上自托管的邮局走了中继主机,因此通过SMTP发送的邮件并不会进到你在邮局web端的发件箱,有些SMTP客户端(例如QQ邮箱)已发邮件也不会自动同步到你服务器上的邮箱,这种情况下如果你想保存已发送的邮件,可以将选择将发信密件抄送给自己。苹果和小米自带的邮箱APP可以与你web端的发件箱同步,就不必抄送了。随便一提我发现经QQ邮箱客户端发送的SMTP邮件会在原始邮件中添加一些多余的包含客户端的信息,还会收集你的邮箱地址,然后腾讯给你发一些广告邮件(这个测试用邮箱地址从未使用过,因而可以肯定是腾讯从QQ邮箱客户端收集的),因此不建议使用。

针对群晖MailPlus:免费版最多只能启用5个系统账户(当然可以有无数个别名,这也是自建邮箱的好处之一),不建议启用反垃圾邮件引擎和杀毒引擎,会占用较多内存(1G以上),这些安全措施是不必要的,除非邮箱受到攻击。

保护自己的邮箱服务器,最好的方式是避免暴露源站,发件使用中继主机是一方面;使用可靠的邮箱客户端是另一方面;此外上述教程中由于域名的MX记录指向了自己的源服务器,仍有暴露的风险,解决办法:

  • 收件也使用中继主机,这需要另外申请,例如Amazon SES接收终端节点只支持美国东部(弗吉尼亚)、美国西部(俄勒冈)、欧洲(爱尔兰)。
  • 或使用服务商的邮件转发/路由,我知道的Cloudflare、Namesilo以及Mailgun都提供这样的服务,只需将MX记录指向它们提供的地址,并配置好自己的转发邮箱,例如你可以将发送到你的某个域名邮箱的邮件转发到你的Outlook邮箱,如果你仍然想要在自己的服务器上收件的话,只需要在自托管邮箱上启用对你的Outlook邮箱的POP3或IMAP收件即可,相当于邮件在Outlook上经过了一道中转。

欢迎留言或来信交流在自建邮箱过程中遇到问题以及有趣玩法。


  1. 坚持23年后,他关闭了自行托管的email,向大厂认输了 ↩︎

  2. 0成本,一招永久解决自建邮件服务器被退信问题 ↩︎

  3. Ghost进阶:邮箱配置避雷#Mailgun开通过程中遇到的问题 ↩︎

  4. 群晖搭建邮箱服务器 ↩︎