procmailrc规则“In-Reply-To标头匹配以前看到的Message-ID标头”

时间:2011-09-08 01:31:01

标签: procmail

试图弄清楚如何使用.procmailrc规则来抛出回复之前看过的邮件的所有邮件。使用maildir,并希望规则覆盖cur /或new /...

中的消息

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

我不能只使用in-reply-to标头检查并抛出任何内容,就好像它是对该地址尚未看到的内容的回复,需要接受它。

1 个答案:

答案 0 :(得分:1)

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

:0c:
| formail -zxMessage-Id: >>msgid.txt

然后检查In-Reply-To:针对此缓存(可能在.procmailrc之前,以便在向缓存添加Message-Id之前过滤垃圾邮件);

:0
* ? formail -zxIn-Reply-To: | fgrep -f msgid.txt -
./whitelisted

另请参阅formail -D的示例进行比较。也许你可以将事物按到一个你可以实际使用formail -D作为后端的形式(在添加到缓存之前替换Message-Id:with From:拆分In-Reply-To:并执行类似的替换在每个消息ID上。 formail可以维持一个恒定大小的LRU缓存,而fgrep文件将继续无限增长(尽管在这种情况下,也许这正是你想要的)。

当您最初进行此设置时,您可能希望从curnew中已有的邮件中收集缓存,但之后,您不需要再次从这些邮件中引用这些邮件。你的食谱。 (如果您的收件箱与我的相似,那么整个收件箱的实时点击将非常不可行。)

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

请注意 - 除非您有异常设置,否则您的外发Message-Id:s将不会添加到缓存中;为了让它真正有用,也许你应该安排以某种方式发生,和/或建立一个匹配你的传出Message-Id:s的模式(理想情况下没有误报,当然也没有假阴性。如果你已经切换了MUAs在过去,如果你想要全面覆盖,你或许应该单独寻找你的旧信息的模式。

警告:未经测试,我可能很生锈。