procmailrc规则适用于;“回复头匹配之前看到的消息ID头”;

procmailrc规则适用于;“回复头匹配之前看到的消息ID头”;,procmail,Procmail,试图找出如何使用.procmailrc规则来抛出所有回复先前看到的邮件的邮件。使用maildir,并希望该规则涵盖cur/或new/中的邮件 我应该让procmailrc解析所有文件吗?或者我应该有一个规则来提取消息id头,将它们转储到一个文件中,然后解析它吗 我不能只是检查并抛出带有in-reply-to标头的任何内容,就好像这是对此地址尚未看到的内容的答复一样,它需要被接受。您需要从传入消息中收集消息Id:s的缓存: :0c: | formail -zxMessage-Id: >>

试图找出如何使用.procmailrc规则来抛出所有回复先前看到的邮件的邮件。使用maildir,并希望该规则涵盖cur/或new/中的邮件

我应该让procmailrc解析所有文件吗?或者我应该有一个规则来提取消息id头,将它们转储到一个文件中,然后解析它吗


我不能只是检查并抛出带有in-reply-to标头的任何内容,就好像这是对此地址尚未看到的内容的答复一样,它需要被接受。

您需要从传入消息中收集消息Id:s的缓存:

:0c:
| formail -zxMessage-Id: >>msgid.txt
然后根据此缓存检查In Reply To:(可能早在您的
.procmailrc
中,这样您就可以在将邮件Id添加到缓存之前过滤垃圾邮件)

有关比较,请参见
formail-D
的示例。也许您可以将内容转换成一种形式,在这种形式中,您可以实际使用
formail-D
作为后端(在添加到缓存之前,将消息Id替换为From:;在回复中拆分消息Id:,并对每个消息Id执行类似的替换)
formail
可以保持恒定大小的LRU缓存,而
fgrep
文件只会无限期地增长(尽管在这种情况下,这可能正是您想要的)

最初设置此选项时,您可能希望从
cur
new
中已有的消息中收集缓存,但在此之后,您不需要再次从配方中引用这些消息。(如果你的收件箱和我的一样,那么对整个收件箱进行实时灰显是不可行的。)

如果您想要一个大的缓存,用SQLite或其他东西替换一个纯文本文件可能是值得研究的。实际上,当一个合适的数据库真的值得付出努力时,您可能想要一个真正的数据库而不是SQLite,但我对这类事情的不同数据库引擎的可伸缩性只有模糊的想法,没有实际经验

请注意,除非您有一个不寻常的设置,否则您的传出消息Id:s将不会添加到缓存中;为了使它真正有用,也许您应该以某种方式安排这种情况发生,和/或建立一种与传出消息Id:s匹配的模式(理想情况下,没有误报,当然也没有误报。如果您在过去切换过MUA,如果您想要完全覆盖,您可能应该单独寻找您的旧消息的模式)


注意:未经测试,我可能已经生锈了。

你真的想“扔掉”通过测试的邮件吗?就像“扔掉”一样?对于大多数实际情况,我认为这将有助于白名单,而不是黑名单。如果你有自己的域名,任何回复中带有来自你域名的消息Id的邮件都应该是合理安全的。我认为垃圾邮件发送者对电子邮件的了解不够,也不愿意伪造。这是一个受控的内部地址这是一个脚本。所以,是的,我要用它来黑名单。我只需要做中期消息id缓存,根本不需要担心出站,所以这是完美的。谢谢!
:0
* ? formail -zxIn-Reply-To: | fgrep -f msgid.txt -
./whitelisted