procmail:调节多个字段

procmail: conditioning on multiple fields

我想将我使用 "From" 字段发送给其他人的 e-mails 存储到名为“/sent”的文件夹中

所以,我使用:

:0:
*^From.*user@outlook.com
$HOME/Mail/sent/.

它曾经工作得很好。但是,现在我也从 address:user@outlook.com 转发我的 e-mail,发生的事情是 e-mail 信封包含 header:Resent-From.*user@outlook.com 所以所有转发的 e-mail 都被保存到已发送的文件夹中。

是否可以有双重条件。也就是说,如果 Resent-From 和 From 都有 *user@outlook.com,那么它应该转到 sent-folder。换句话说,是否可以使用 AND 或 OR 或 Negation 条件。

更新: 提供的解决方案是正确的。我在这方面犯了一个错误我忽略了“:”。感谢您的解决方案和耐心。我也学到了很多东西和一些资源,对此我也很感激,

谢谢!

默认情况下,Procmail 完全按照您的要求进行操作。多个条件将被 AND 运算在一起。第一个失败导致配方被放弃;如果他们都成功,则采取行动。

:0  # second colon removed - don't use lock on directories
* ^From:(.*\<)?user@outlook\.com
* ^Resent-From:(.*\<)?user@outlook\.com
$HOME/Mail/sent/.

另请注意我是如何修改您的正则表达式以收紧它的。

如果不这样做,请在条件前添加 !。要执行 OR,您可以否定这两个条件,并在 "else" 部分(德摩根定律)中执行操作。

:0
* ! First condition
* ! Other condition
{ } # do nothing
:0E # else, meaning at least one was true
action

当然,如果两个条件都是正则表达式,你可以简单地使用正则表达式或运算符。

:0
* First condition|Other condition
action