我遇到的实际问题:
我的电子邮件服务器(exim,但对此几乎无关紧要)已经运行多年,它通过 /etc/aliases 转发电子邮件(即[电子邮件保护]指向~5 个人)和个人用户的 .forward 文件(即我的 .forward 有“[电子邮件保护]“)。这个问题多年来一直存在,各种服务在不同时期拒绝接受邮件,但最近 Gmail 开始非常认真地拒绝这些邮件。
我设置了 DKIM、SPF 和 DMARC,但 DMARC 不适用于这些转发的电子邮件。我唯一违反最佳实践的事情是我的 IP 的反向 DNS 指向50-250-232-19-static.hfc.comcastbusiness.net.
,这当然不是很好。我怀疑只是但修复该问题就可以解决这个问题。
我已经开始通过服务传递来自我控制的实际域的邮件(smtp2go
但我仍然认为这并不重要),但他们只会接受实际上来自我的域的邮件。
我认为就这一点而言,传统 MTA 意义上的转发在现代反垃圾邮件环境中实际上并不可行。
我可以尝试将我所有的邮件处理移至外部服务(例如,一位朋友使用 purelyemail),但这会给我的一些用户(其中一些用户使用本地 maildir,如 alpine 和 mutt)带来很大的困扰,而且我认为我只是在拖延问题:也许通过这样的服务进行 MTA 风格的转发目前可行,但我敢打赌,总有一天它会失败。
我想弄清楚的是,在不对整个设置进行巨大更改的情况下,我可以做哪些最少的事情来使邮件流通。
这些是我能想到的选项:
使用邮件同步工具(似乎有几种;OfflineIMAP、isync、imapsync 等;如果有人有他们喜欢的工具,那将非常有帮助)将邮件从本地邮件目录直接推送到用户的 IMAP 帐户。这是我计划做的,而不是我自己的 .forward 文件,但这对随机董事会成员不起作用,特别是因为据我所知,IMAP 信用是全有或全无的。
让 MTA 转发邮件,但将发件人重写为我域中的地址,以便 DMARC 正常工作等等。换句话说,像 MUA 而不是 MTA 那样转发,但在 MTA 级别。奇怪的是,我在网上没有看到太多关于如何做到这一点的信息;我确信我可以使用 procmail 和 formail 自己解决,但我有点希望这个问题能得到很好的解决。那里有一些明确的细节工作,比如使 Reply-To 更正等等。我知道 mailman 会在这里做正确的重写,因为我已经将它配置为对邮件列表执行此操作,但这就是我所找到的全部内容。
我会爱来这里了解其他可能的解决方案。如果做不到这一点,我正在寻找有关如何执行 #1 或 #2 的具体建议,因为我希望将两者结合起来。
答案1
这“解决方案”处理传统电子邮件转发如何突破 SPF脊髓灰质炎病毒; 这发件人重写方案。
SRS 可用于在转发时修改发件人地址,以便 SPF 验证不会反对这些地址。它的工作原理是将原始信封发件人编码到新的发件人本地部分,并使用转发站点运行的域作为发件人的新域。任何 DSN 消息都应在转发站点返回给这个新发件人,转发站点可以从编码的本地部分中提取原始发件人,并将 DSN 转发给发件人。
这是避免 SPF 对转发造成破坏的一种方法。
它由 exim 支持:https://www.exim.org/exim-html-current/doc/html/spec_html/ch-dkim_spf_srs_and_dmarc.html以及其他几个 MTA。
答案2
注释破坏了格式,因此这里介绍如何使用 Exim 通过 SRS 重写发件人标题(以及信封发件人)。
文档位于https://www.exim.org/exim-html-current/doc/html/spec_html/ch-dkim_spf_srs_and_dmarc.html拥有这个:
return_path = ${srs_encode {SRS_SECRET} {$return_path} {$original_domain}}
将其添加为下一行:
headers_rewrite = *@* "$return_path" f
为了提供更好的收件人体验,我最终采取的做法是:
headers_add = X-Forwarded-For: $reply_address
headers_add = Reply-To: $reply_address
return_path = ${srs_encode {SRS_SECRET} {$return_path} {$original_domain}}
headers_rewrite = *@* "$return_path" f
这样,回复实际上就可以正常工作,而不必通过我的服务器路由回来,尽管如果它确实通过我的服务器路由回来做工作。