【问题标题】:Email Server Design: Avoiding Loops [closed]电子邮件服务器设计:避免循环 [关闭]
【发布时间】:2011-01-20 03:38:19
【问题描述】:

假设您正在设计一个具有规则支持(如条件转发等)的精美电子邮件服务器。电子邮件循环的古老问题让您眼前一亮:

1) 假设您设置了将所有邮件转发到另一个地址的规则。如果该地址不存在,并且该域的邮递员将消息发回给您,告诉您这一点怎么办。当然,您的规则不会区分这些消息并转发它们,从而创建一个循环。

2) 另一种情况是两个用户,使用这个客户端客户端,设置转发规则到对方的地址。我们所需要的只是一条启动消息,它们将分拆成一个循环。

3) 或者,自动回复情况如何,客户端转发到自动回复的地址,从而导致另一个循环。

我不是这方面的专家,但看起来检测循环不起作用。我们当然可以想出一些启发式方法,但似乎不存在包罗万象的算法。

我一直在考虑的一个解决方案根本不涉及检测。相反,我们只是观察帐户的邮件发送活动高(或由规则引起的高发送活动),并暂时禁用这些帐户的电子邮件/规则,直到他们纠正问题为止。但是,此解决方案必须在导致循环的帐户与仅接收大量邮件并将其转发到其他地方的帐户之间进行区分。

我们还可以对所有帐户应用限制,并确保如果循环开始,它们不会占用大量带宽。不过,在邮箱填满之前,这不会停止循环的运行。

我缺少什么好的解决方案吗?

【问题讨论】:

    标签: email loops


    【解决方案1】:

    首先,从阅读RFC 3834 开始。它对您关心的内容提供了一些很好的见解。 (它涵盖了自动回复,而不是转发,但它仍然很有用。)

    一般情况下,您需要在转发期间向邮件添加 X 标头,以指示邮件已发送到用户邮箱一次。 (This is what the Sieve RFC mentions in its redirect section.) 如果一条消息是针对bob@example.com 的,并且有一个X 标头提到bob@example.com,那么你就有了一个循环。所以是这样的:

    X-YourServer-Delivered: bob@example.com
    

    您还需要避免转发邮件传递通知,该通知应将<> 作为 SMTP MAIL FROM。并且不要转发自动回复消息,它应该有一个Auto-Submitted 标头,其值不是“no”。

    查看 RFC 3834 以了解更多关于转发哪些内容的想法,但以上内容应涵盖大多数情况。

    【讨论】:

    • 如果您想命名您的自定义 loop-buster 标头,Delivered-ToX-Loop 是两个比较流行的。
    • 这是一个好的开始,但它也依赖于其他系统来遵守 RFC,这在大多数情况下可能是正确的,但我们无法保证。听起来我们想要一种在任何情况下都可以限制连接作为备份的方法。
    【解决方案2】:

    1) 假设您设置了转发规则 你所有的邮件到另一个地址。 如果那个地址不存在怎么办, 和该域的邮政局长 给你发回消息告诉你 这个。当然,你的规则不 区分这些消息 并转发它们,创建一个 循环。

    好吧,想想看,你会收到同样的“邮箱无法访问”消息一次、两次、三次。如果您只是将其视为垃圾邮件并在第三个相同副本之后停止对其应用规则,那么您就大功告成了!

    这同样适用于您的第三个示例,自动回复将是相同的。在第 3 条相同的消息之后停止运行您的规则。

    第二个有点棘手,而且可能性很小。我不确定最佳解决方案,但您可以例如检查差异并查看所有新消息是否正在添加 FW: 在标题中或添加报价。不知道。。

    【讨论】:

      【解决方案3】:

      您可以在规则处理器中包含一些内容,以检查自动生成的电子邮件的收件人,并且如果已将完全相同的电子邮件(可能通过哈希)发送给该收件人,则它不会发送电子邮件。

      【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 2011-05-25
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2010-12-12
      相关资源
      最近更新 更多