我从外部监控服务收到包含消息body的电子邮件,其中包含随机数量的警告:
foo
warning X
bar
warning X
...
或者:
warning X
warning Y
foo
warning X
bar
warning Z
...
警告 X 无关紧要,但所有其他警告都很重要。 X 是已知类型 - 所有其他类型都可以是任何类型。
如果电子邮件仅包含
warning X
行,我可以安全地将其丢弃。筛子脚本很简单:
if body :contains "warning X" {
fileinto :create "INBOX.Trash";
}
但是,当消息包含
warning X
和其他警告时,脚本会丢弃该消息,而我会错过其中的所有其他警告,这是不可接受的。
如何丢弃所有专门包含 X 类型警告的消息?
如果我有正则表达式,我可以检查类似
"warning [^X]"
的内容,但到目前为止我无法找到任何方法在 sieve 中表达这一点。
我想到的下一件事是将
"warning X"
的出现次数与 "warning "
的出现次数进行比较。如果它们相等,则意味着每个警告实际上都是 X
类型。然而, :count
表达式似乎不适用于消息体,而且似乎只与硬编码整数进行比较。
发布问题后不久,我意识到我确实有正则表达式:
require ["body", "fileinto", "mailbox", "regex"];
if not body :regex "warning [^X]" {
fileinto :create "INBOX.Trash";
}
这个脚本似乎达到了预期的效果。