procmailrc-Killfile 的收件人地址?

procmailrc-Killfile 的收件人地址?

我想使用 procmailrc(现在只接收垃圾邮件的临时地址)阻止具有某些收件人地址的邮件。

我找到了使用killfile/黑名单的代码示例,但它仅适用于发件人地址(FROM)。

FROM=`formail -xFrom: | sed -e 's/ *(.*)//; s/>.*//; s/.*[:<] *//'`
:0

* ? fgrep -qxis $FROM $PMDIR/killfile

/dev/null

如何调整此代码以使其适用于收件人地址 (TO)?如果能够在文本文件中列出不需要的收件人地址,那就太好了。

我对正则表达式非常缺乏经验,所以我很感激您提供易于理解的答案。

我的目标是能够简单地列出要阻止的地址:

[email protected]
[email protected]

在 procmailrc 中我必须这样做:

:0:
* ^To.*[email protected]
/dev/null

:0:
* ^To.*[email protected]
/dev/null

这对于输入新地址来说要麻烦得多。

答案1

我手头没有 procmail 可供测试,但这是一种方法:

:0
* ^TO_(one@example\.com|two@example\.com|three...)
/dev/null

这个想法是将每个垃圾邮件目标地址作为“^TO_”魔术正则表达式中的替代/可能性。任何垃圾邮件地址的匹配都会将电子邮件定向到 /dev/null。我迂腐地转义了电子邮件地址中的句点,以便它们匹配句点,而不是保留其通常的正则表达式含义“任何单个字符”。在实践中不太可能成为问题,因为您的垃圾邮件地址不太可能收到发往“one@exampleJcom”(“J”代表任何其他随机字符)的电子邮件。

我喜欢这种方法,因为它使处理简单并且在 procmail 内。

如果垃圾邮件目标列表经常更改,我会考虑采用不同的方法,例如INCLUDERC提取包含每个垃圾邮件目标的“/dev/null”配方的生成文件。

“如何对两个或多个条件进行逻辑或?”问题在Procmail常见问题解答涵盖one|two|three语法。语法^TO_描述在Procmail 快速参考或在您当地人 procmailrc

答案2

您找到的配方可以轻松地进行修改以提取To:地址。

TO=`formail -xTo: | sed -e 's/ *(.*)//; s/>.*//; s/.*[:<] *//'`
:0
* ? fgrep -qxis "$TO" killfile
/dev/null

当然,这CC:也可以扩展到提取和许多其他收件人标头。但正确的解决方案是将这些地址配置为首先不发送到您的收件箱。

相关内容