我想使用 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:
也可以扩展到提取和许多其他收件人标头。但正确的解决方案是将这些地址配置为首先不发送到您的收件箱。