假设您正在设计一个支持规则的花哨的电子邮件服务器(如条件转发等).电子邮件循环的古老问题盯着你:
1)假设您设置了一条规则,将您的所有邮件转发到另一个地址.如果该地址不存在,该域的邮局管理员会向您发送消息,告诉您这一点,该怎么办?当然,您的规则不会区分这些消息并转发它们,从而创建循环.
2)另一种情况是两个用户,使用此客户端客户端,为彼此的地址设置转发规则.我们所需要的只是一个单一的启动消息,它们将转向循环.
3)或者,如何自动回复案例,客户端转发到自动回复的地址,导致另一个循环.
我不是这方面的专家,但它看起来不像检测循环会起作用.我们当然可以提出一些启发式算法,但似乎并不存在一个包罗万象的算法.
我一直在考虑的一个解决方案根本不涉及检测.相反,我们只是查看高邮件发送活动(或由规则引起的高发送活动)的帐户,并暂时禁用这些帐户的电子邮件/规则,直到他们纠正问题为止.但是,这个解决方案必须在导致循环的帐户和简单接收大量邮件的帐户之间走线,并将其转发到其他地方.
我们还可以对所有帐户应用限制,并确保如果循环开始,它们不会吸收大量带宽.这不会阻止循环运行,直到邮箱填满为止.
我有什么好的解决方案吗?
首先,首先阅读RFC 3834.它为您关心的内容提供了一些很好的见解.(它涵盖了自动回复,而不是转发,但它仍然有用.)
通常,您希望在转发期间向邮件添加X标头,以指示邮件已传递到用户的邮箱一次.(这是Sieve RFC在其redirect章节中提到的内容.)如果有消息出现bob@example.com并且有一个X-header提及bob@example.com,那么你就有了一个循环.所以像这样:
X-YourServer-Delivered: bob@example.com
Run Code Online (Sandbox Code Playgroud)
您还希望避免转发邮件传递通知,该通知应具有<>SMTP MAIL FROM.并且不要转发自动回复消息,该消息应该具有Auto-Submitted除"否"之外的值的标头.
查看RFC 3834以获取有关不转发内容的更多想法,但上述内容应涵盖大多数情况.