原先ACM班 Transactional Mail 是直接用自建的 postfix 发的,自建邮箱最担心的事情就是被当作垃圾邮件。然而毕竟域名DNS以及IP反向DNS都不在自己手上,似乎没有任何办法可以改变这个窘境。昨天想了个权宜之计,换一个域名来发邮件。

要想发出的邮件不被当作垃圾邮件,可以从下面这几个方面入手:

  • 确保IP不在黑名单内
  • 设置IP的反向DNS(需要IP提供商支持)
  • 设置SPF记录(域名DNS中添加TXT记录)
  • 设置DKIM记录(服务器配置+域名DNS中添加TXT记录)
  • 设置DMARC记录(服务器配置+域名DNS中添加TXT记录)
  • 不乱发邮件
  • ……

自建邮箱参考资料

调试技巧

配置好了之后可以试着给不同的邮箱发邮件,看看会不会被当作垃圾邮件。

sudo apt-get install heirloom-mailx
echo test body | mailx -S smtp=127.0.0.1 -r noreply@example.com -s "test subject" -v example@gmail.com

然后可以在收信邮箱查看原始邮件,看看头部信息就可以知道这些配置有没有起作用

Authentication-Results: mx4.messagingengine.com;
    arc=none (no signatures found);
    dkim=pass (1024-bit rsa key sha256) header.d=example.com header.i=@example.com header.b=XVDsyrZV x-bits=1024 x-keytype=rsa x-algorithm=sha256 x-selector=mail;
    dmarc=pass header.from=example.com;
    iprev=fail policy.iprev=1.2.3.4 (Error NXDOMAIN looking up 1.2.3.4 PTR,NOT FOUND);
    spf=pass smtp.mailfrom=noreply@example.com smtp.helo=example.com;
    x-aligned-from=pass;
    x-category=clean score=0 state=0;
    x-ptr=fail x-ptr-helo=example.com x-ptr-lookup=;
    x-return-mx=pass smtp.domain=example.com smtp.result=pass smtp_is_org_domain=yes header.domain=example.com header.result=pass header_is_org_domain=yes

比方说这里我们就可以看到 DKIM / DMARC / SPF 都通过了,但是找不到IP的反向DNS。不过我也配置不了反向DNS,所以基本上到此为止了。我试了试,往 Gmail / Fastmail / 126 / QQ 都能正常收到收件箱,还是不错的。