我在通过我的邮件服务器发送许多 (>20) 收件人或抄送收件人的电子邮件时遇到问题。更糟糕的是,这些是邮件列表,因此可以接触到数百人。然后人们回复-所有引起恼人的大量消息。
用户教育不是一种选择(他们是故意这样做的)。我可以在邮件服务器中过滤这些邮件吗?例如,使用 Exim ACL。
recipient_max
不是一种选择,因为这也会限制Bcc
应该通过的 'ed 邮件。
我在通过我的邮件服务器发送许多 (>20) 收件人或抄送收件人的电子邮件时遇到问题。更糟糕的是,这些是邮件列表,因此可以接触到数百人。然后人们回复-所有引起恼人的大量消息。
用户教育不是一种选择(他们是故意这样做的)。我可以在邮件服务器中过滤这些邮件吗?例如,使用 Exim ACL。
recipient_max
不是一种选择,因为这也会限制Bcc
应该通过的 'ed 邮件。
首先,重要的是您要了解客户可以发送一封在 To 标头中包含 1 个地址的电子邮件,但如果他们知道如何恰到好处地滥用它,那么他们实际上会将其发送给 1000 人。计算 To: 或 Cc: 标头中的电子邮件地址数量并不能保证您会阻止客户发送的电子邮件。如果他们以幼稚的方式滥用您的系统,您只会阻止他们的电子邮件。但是,您说他们只是将所有内容都放在 To 字段中(即天真的方式),因此此答案的其余部分假定这是将数据提交到您的 Exim 服务器的方式。
现在,按照您的要求直接回答您的问题:在 DATA ACL 中(仅在 DATA ACL 中!),您可以通过两步过程检查 To 或 Cc 标头中的电子邮件地址数量。要测试这些标头,您可以使用 $h_To: 和 $h_Cc: 访问它,尾随冒号是必需的。假设 To: 标头是:
通过此示例,我将向您展示两步过程的每个步骤的作用:
使用当前版本的 exim (4.82),这最终在您的 DATA ACL 中将如下所示:
如果您使用的是旧版本,例如 Debian stable 中的版本,则可以使用旧版本迭代列表并增加计数器:
请注意,在上述两种情况下,{yes}{no} 部分都是多余的。${if...} 语句的返回始终是真或假,因此考虑到这一点,您可以根据需要将其关闭。我更喜欢明确地放入它,因为它使它更具可读性(对我以及任何可能跟随我并且必须阅读此代码的人)。