最近postfix-users邮件列表服务进行技术升级,引起欣然大波,众多人参与讨论了数天,回复邮件达到几百封。
它升级的主要地方在于,将发送给邮件列表的sender,改成了列表自身的地址(@postfix.org结尾的)。之前的sender就是独立的发送者本人,现在全部改成了postfix的官方域名,只是回复地址仍然是原始sender。
这是因为,在新的电子邮箱形势下,postfix不得不这样做。因为不这样做的话,很多发送者投递的信件,会被大量的recipients拒收,从而影响邮件列表的投递质量。这种拒收大多数是由DMARC引起的,下面予以描述。

比如常见的yahoo邮箱,它的DMARC设置是这样的(DNS里的txt记录):
v=DMARC1; p=reject; pct=100; rua=mailto:[email protected]; ruf=mailto:[email protected];
问题在于p=reject这个配置,只要yahoo发出去的邮件,在其他接受者那里DMARC校验失败,就会被拒信。这是yahoo自己设置的苛刻的DMARC规则,其他MTA会遵循这个规则。
而邮件列表转发的邮件,大多数会导致DMARC失败。这是因为:
- 邮件列表在转发时,如果不更改信件头部的from:地址,那么接受方DMARC会校验这个from:地址的SPF记录。SPF与发送时的IP授权有关,如果列表服务器在发送时执行了SRS(地址重写),那么重写的sender地址,对于from:校验没有帮助。如果不执行SRS,那么SPF是天然失败的。
- 邮件列表在转发时,很多列表服务会在信件主体里,加上自己的签名(比如列表信息、退订方式),这就破坏了原始信件的DKIM校验。
如上两个原因,导致邮件列表转发的信件,SPF和DKIM都失败。而DMARC是依赖于这两个条件的,于是DMARC也失败,导致被接受者MTA拒收。
所以,postfix官方没有办法,只好把发送给邮件列表的信件,不管是smtp session的sender地址,还是信件header里的from:地址,都改成postfix自己的地址,并且加上自己的DKIM签名。这样,这封信等于是postfix服务器自己重新发的,各项标准(SPF, DKIM)都使用自己的技术(不过目前没看到postfix.org配置DMARC),这样就不会被其他MTA拒收。
这个问题的原因还在于电子邮件技术升级带来的生态影响。现代邮件系统大多数配置了SPF, DKIM, DMARC等先进标准,以防止系统被滥用。然而,过于苛刻的DMARC配置,会让传统的邮件列表转发服务失效。
除了yahoo外,存在类似苛刻DMARC的还有mail.ru, AOL, zoho等厂商。而倾向于技术型的企业,比如Gmail, GMX, Fastmail,则不存在这类问题。比如gmail的DMARC设置:
v=DMARC1; p=none; sp=quarantine; rua=mailto:[email protected]
这里p=none的策略设置显然是安全且合理的,它可以放心投递到邮件列表。
综上所述,技术总是升级的,在朝着现代化、标准化发展的同时,也要考虑对周边生态的影响。过于激进的技术更新,在带来好处的同时,也有意想不到的弊端。作为开源邮件系统的主要贡献者,postfix官方升级了自己的系统,让yahoo这些邮箱也能发进来。但还有众多的旧列表系统没有升级,那么yahoo, aol, mail.ru这些系统,发进去的邮件就会遭遇退信,这恐怕是他们自己在设置DMARC时,也没有想到的。