AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 569192
Accepted
dtech
dtech
Asked: 2014-01-23 14:48:23 +0800 CST2014-01-23 14:48:23 +0800 CST 2014-01-23 14:48:23 +0800 CST

使用 exim ACL 拒绝包含许多收件人/抄送收件人的电子邮件

  • 772

我在通过我的邮件服务器发送许多 (>20) 收件人或抄送收件人的电子邮件时遇到问题。更糟糕的是,这些是邮件列表,因此可以接触到数百人。然后人们回复-所有引起恼人的大量消息。

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

recipient_max不是一种选择,因为这也会限制Bcc应该通过的 'ed 邮件。

email-server
  • 1 1 个回答
  • 2669 Views

1 个回答

  • Voted
  1. Best Answer
    Todd Lyons
    2014-01-23T15:56:11+08:002014-01-23T15:56:11+08:00

    首先,重要的是您要了解客户可以发送一封在 To 标头中包含 1 个地址的电子邮件,但如果他们知道如何恰到好处地滥用它,那么他们实际上会将其发送给 1000 人。计算 To: 或 Cc: 标头中的电子邮件地址数量并不能保证您会阻止客户发送的电子邮件。如果他们以幼稚的方式滥用您的系统,您只会阻止他们的电子邮件。但是,您说他们只是将所有内容都放在 To 字段中(即天真的方式),因此此答案的其余部分假定这是将数据提交到您的 Exim 服务器的方式。

    现在,按照您的要求直接回答您的问题:在 DATA ACL 中(仅在 DATA ACL 中!),您可以通过两步过程检查 To 或 Cc 标头中的电子邮件地址数量。要测试这些标头,您可以使用 $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 stable 中的版本,则可以使用旧版本迭代列表并增加计数器:

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

    请注意,在上述两种情况下,{yes}{no} 部分都是多余的。${if...} 语句的返回始终是真或假,因此考虑到这一点,您可以根据需要将其关闭。我更喜欢明确地放入它,因为它使它更具可读性(对我以及任何可能跟随我并且必须阅读此代码的人)。

    • 2

相关问题

  • 寻找开源电子邮件归档应用程序 [关闭]

  • 防止您看起来像垃圾邮件发送者的最佳做法 [重复]

  • 什么是允许POP邮箱用户打开和关闭Vaction AutoReply的快速且易于理解的PROCMAIL方式

  • 邮件服务器设置

  • 电子邮件标题包含在电子邮件正文中

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve