![在 Postfix 中过滤重复的电子邮件](https://linux22.com/image/746114/%E5%9C%A8%20Postfix%20%E4%B8%AD%E8%BF%87%E6%BB%A4%E9%87%8D%E5%A4%8D%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6.png)
是否可以在 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尽管它试图做一些不同的事情,但它可能作为模板格式有用。