Exim 和接收具有大量收件人列表的电子邮件

Exim 和接收具有大量收件人列表的电子邮件

我在 Debian 上运行了 Exim4,配置为接收多个域的邮件。Exim 设置为将收到的所有电子邮件转发到另一个邮箱。此邮箱配置了一个万能邮箱,所有内容都放入其中。

我的问题是,当一封电子邮件发送到包含大量地址的域时(所有地址都发送到同一个域,但用户不同),Exim 将通过多个连接接收单封电子邮件。这意味着 catchall 邮箱会收到单封电子邮件的多个副本均包含完整的收件人列表。

例如,我可以通过从我的 Gmail 帐户发送一封包含 500 个收件人的电子邮件来重现它(例如[电子邮件保护][电子邮件保护][电子邮件保护];等等,总共 500 条)。Exim 收到的邮件为 20 条邮件(每条 25 个收件人;这似乎是 gmail 服务器的设置)。因此,catchall 邮箱收到了 20 条邮件,每条邮件都包含所有 500 个地址。

我非常确定我理解为什么会发生这种情况,但是有什么方法可以配置 Exim 只接收一次,或者将其合并为一次?我这边能做些什么吗,还是只能听天由命?

这会破坏轮询综合邮箱和解析每封电子邮件中每个收件人的流程。

更新:另一种可能性:我可以告诉 exim 仅转发第一条消息并忽略其余消息吗?

更新 2:我如何知道电子邮件是发给哪些收件人的?如果 exim 收到一封发给 500 个收件人的消息,但只发给 25 个收件人,我如何知道它是发给哪 25 个收件人的?我在邮件标题中看到的最接近的内容是“已接收:来自 SMTPD-FWD”,这是 25 个收件人中的第一个。我可以让 exim 以某种方式将所有 25 个收件人插入到标题中吗?

答案1

Exim 的默认配置是允许每条消息的收件人数量不受限制。这由参数控制recipients_max。如果您收到的收件人数量较少,则可能是您的配置限制了收件人数量,或者问题出在上游。

您可能已经注意到,当多个扩展为一条消息创建相同的投递地址时,Exim 只会投递一次。它只是在消息之间不这样工作。

所有这些邮件的邮件内容message_id都应该相同,您可能希望使用 procmail 或类似程序将重复邮件归档到不同的文件夹中。网上有一些示例,它们可以执行与您想要执行的操作类似的操作。

编辑:您可能能够让 Exim 使用milter来过滤掉重复项。如果您启用了数据库访问,则可以在数据 acl 中构建过滤器来检测重复项。但是,最好使用更专业的 MDA(例如procmail将消息传递到 catchall 地址)。对于部分或所有用户,Exim 都可以与使用 MDA 的 procmail 配合良好。

现有的方案可以处理重复消息。 蒂莫有一个 procmail 规则需要检查重复发送的消息是快速连续的. 这应该可以处理消息的 message_id 发生变化的情况。

相关内容