如果电子邮件收件人用户未通过匹配测试,procmail 将重写主题行

如果电子邮件收件人用户未通过匹配测试,procmail 将重写主题行

我有一个本地 procmail 用户“bob”。

如果收到一封电子邮件并匹配[电子邮件保护],则不应采取任何行动。

但是,如果收到一封电子邮件并且是 [anything_else]@domain.com 那么我想重写主题行以在主题行前面插入“[spam]”。

因此,它是对“bob@”的反向匹配(匹配除 bob@ 之外的任何内容),并且我们保留原始主题行,只是在其前面添加“[spam]”。

我如何使用 Procmail 来实现这一点?

答案1

您的要求不太明确。Procmail 可以匹配任何字符串,但您真的想在消息中的任何地方查找字符串吗?并且您真的想domain.com为了这条规则而忽略其中没有的消息吗?

:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
    :0fhw
    * ^Subject:\/.+
    | formail -I"Subject: [spam]$MATCH"
}

和字边界阻止匹配像或 这样的子字符串,而空括号是一种黑客行为\<,因为 Procmail 对于以反斜杠开头的正则表达式很奇怪。\>tombobsubdomain.complete.org

如果您只想查看标题,请HB从第一个冒号行中删除(您可以保留,H但如果您不放置任何标志,这是默认设置)。如果您想匹配特定标题,请将其拼写出来。如果您想专门检查收件人,宏^TO_可以让您轻松地在多个不同的标题(、等)中执行此To:操作Cc:

:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"

因为我们删除了HB标志,所以我们可以将之前两个带有不同标志的配方组合起来。第二个^TO_配方检查包括的任何地址bob,但该地址已被之前的否定条件排除。

这仍然存在一些可能需要进一步探讨的极端情况;如果你可以编辑你的问题来澄清它,也许我可以更新它以涵盖更多的基础知识。

不过,SMTP 并不要求在标头中拼写出收件人。典型的例子是,Bcc:这也是许多邮件列表使用的机制。也许您的 MTA 会拼写出收件人,Delivered-To:但严格来说,这种类型的过滤器最好在 MTA 中实现。

相关内容