拒绝许多具有exim ACL的收件人的电子邮件

我遇到了很多(> 20)To或Cc收件人通过我的邮件服务器发送电子邮件的问题。 更糟糕的是这些邮件列表,以至于人们的呃。 人们然后回复,所有这些引起令人不快的大量信息

用户教育不是一种select(他们故意这样做)。 我可以在邮件服务器中过滤这些邮件吗? 例如用Exim ACL。

recipient_max不是一个选项,因为这也会限制Bcc电子邮件应该通过。

首先,了解客户可以在To头部发送1个邮件地址的电子邮件,但如果他们弄清楚如何滥用该邮件,则实际发送给1000个人是非常重要的。 统计“收件人:”或“抄送:”标题中的电子邮件地址数量并不能保证您将阻止客户正在发送的电子邮件。 你只会阻止他们的电子邮件,如果他们以一种天真的方式滥用你的系统。 然而,你说他们只是把所有的东西都放在了To域(也就是天真的方式),所以这个答案的其余部分假定数据被提交到Exim服务器的方式。

现在,按照您的要求直接回答您的问题:在DATA ACL中(仅在DATA ACL!中),您可以通过两个步骤检查To或Cc标头中的电子邮件地址数量。 要testing这些头文件,可以使用$ h_To:和$ h_Cc来访问它:尾部冒号是必需的。 假设To:头是:

 "Org user" <[email protected]>,<[email protected]>,"Todd Lyons" <[email protected]> 

通过这个例子,我会告诉你两步过程的每个步骤:

 # Step 1: To header converted to a (colon-separated) list $ exim -be '${addresses:"Org user" <[email protected]>,<[email protected]>,"Todd Lyons" <[email protected]>}' [email protected]:[email protected]:[email protected] # step 2: Now count the number of list items $ exim -be '${listcount:${addresses:"Org user" <[email protected]>,<[email protected]>,"Todd Lyons" <[email protected]>}}' 3 

使用当前版本的exim(4.82),最终在DATA ACL中看起来是什么样的:

 deny message = Too many recipients condition = ${if >{ ${listcount:${addresses:$h_To:,$h_Cc:}} }{10} {yes}{no}} 

如果您使用的是旧版本(如Debian稳定版本),则可以使用迭代列表的旧版本并递增计数器:

 deny message = Too many recipients condition = ${if >{ ${reduce {${addresses:$h_To:,$h_Cc:}} {0} {${eval:$value+1}}}} {10} {yes}{no}} 

请注意,在上述两种情况下,{yes} {no}部分都是多余的。 $ {if …}语句的返回总是为真或假,所以考虑到这一点,如果你愿意的话,你可以把它关掉。 我更愿意明确地把它放在里面,因为它使它更具可读性(对我来说,对任何可能跟随我的人都必须阅读这段代码)。