在 Postfix 中过滤重复的电子邮件

在 Postfix 中过滤重复的电子邮件

是否可以在 Postfix 中过滤掉重复的电子邮件?

我们将重复定义为在 N 秒内发送给同一收件人且主题相同(可能是相同的消息正文?)的消息,其中 N 是可配置参数。

这种需求源自设计错误/配置错误的软件,例如,允许每隔 1 秒重新发送 100 次注册电子邮件。当然,在理想世界中,每个软件都应该得到修复,但在非理想世界中,电子邮件管理员必须处理造成的混乱后果(取消公司电子邮件的黑名单等)。

答案1

仅使用后缀无法实现这一点 - 但有多种方法可以将此功能编写代码/脚本到后缀中(尽管并不简单)

我还没有测试过这种特殊的注入方法,但是类似于:

编写您的过滤脚本/程序 - 例如,查询最近是否发送过此类电子邮件,有条件地继续处理该电子邮件,然后将其添加到最近的电子邮件列表中(并定期清理该列表)。您可能只想针对数据库表执行日志/查询,并让 cron 脚本定期清理它?

该脚本将输入一封电子邮件,然后检查它,然后退出或将其重新注入系统以使用 sendmail 进行进一步处理。粗略地说

 #/path/to/interpreter

 pseudocode to write write date to temporary file or memory

 pseudocode to grep input for whatever is considered a match, check
 against database, and record new line in database

 pseudocode to reinject email using sendmail, for example with a command like
 if [ message to be sent ]
      cat message | /usr/sbin/sendmail "$@"
      exit $?
 else
      exit 1 

然后修改 /etc/postfix/main.cf 并添加适当的行以将过滤器调用到“smtp”行,或者,如果您使用备用端口从此应用程序发送电子邮件,则可以添加它。例如:

修改 smtp 行以通过添加附加行来调用过滤器 -

 smtp      inet  n       -       -       -       -     smtpd
 -o content_filter=dupfilter:

然后添加一些东西来调用 dupfilter

  dupfilter   unix    -   n    n   -   - pipe
   flags=Rq user=scriptowner argv=/path/to/filter ${sender} -- ${recipient}

我碰到https://www.howtoforge.com/add-disclaimers-to-outgoing-emails-with-altermime-postfix-debian-etch尽管它试图做一些不同的事情,但它可能作为模板格式有用。

相关内容