可以说你正在设计一个有规则支持(如条件转发等)的华丽电子邮件服务器。电子邮件循环的古老问题盯着你:电子邮件服务器设计:避免环路
1)假设你设置了一个将所有邮件转发到另一个地址的规则。如果该地址不存在,那么该域名的邮局管理员会将邮件发回给您,告诉您这一点。当然,你的规则并没有区分这些消息并转发它们,创建一个循环。
2)另一种情况是两个用户,使用这个客户端客户端,为彼此的地址设置转发规则。我们所需要的只是一条启动信息,而且他们将要分成一个循环。
3)或者,如果自动回复的情况下,客户端转发到自动回复地址,导致另一个循环。
我不是这方面的专家,但它看起来不像检测循环会起作用。我们当然可以想出一些启发式算法,但似乎并不存在一窍不通的算法。
我一直在想的一个解决方案根本不涉及检测。相反,我们只是注意帐户中的高邮件发送活动(或由规则导致的高发送活动),并暂时禁用这些帐户的电子邮件/规则,直到他们纠正问题。但是,这种解决方案必须在导致循环的账户之间行,以及只收到大量邮件并将其转发到其他地方的账户。
我们也可以将节流应用到所有帐户,并确保如果循环开始,它们不吸取大量的带宽。这不会停止运行循环,直到邮箱填满为止。
我错过了什么好的解决方案吗?
你不得不散列身体,每一跳增添了`Received`头。从技术上讲,甚至是有风险的,因为许多[RFC中引用的MTA中转添加来自线的端部/删除空白的可能性](http://tools.ietf.org/html/rfc2045#section-6.7)。 (虽然我怀疑现在的做法很常见。) – dkarp 2011-01-19 19:08:58
好点 - 你的答案绝对是最好的方法。 =) – 2011-01-28 14:10:16