使用 sieve fileinto 正则表达式动态地将邮件移动到匹配的邮箱中

使用 sieve fileinto 正则表达式动态地将邮件移动到匹配的邮箱中

我正在尝试创建一个筛选脚本,将邮件归档到与特定主题标识符匹配的邮箱(或收件箱的子目录中)。

例如如果主题包含123(三位数字,0-9),则服务器应检查是否存在与相同标识符匹配的邮箱,如果Foobar 123存在,则将邮件归档到该邮箱中,否则将其留在收件箱中。

检查主题头中的标识符没有问题,我可以将匹配的值分配给变量${1}

但是,该fileinto命令不适用于该:regex参数。据报道sieve-test

error: unknown tagged argument ':regex' for the fileinto command (reported only once at first occurrence).

这是我目前拥有的筛选脚本:

require ["fileinto", "regex", "mailbox", "variables"];

if header :regex "Subject" "([1-9][0-9][0-9])" {
        fileinto :regex "INBOX\..*${1}.*";
}

是否有一种方法可以让我首先识别出匹配的收件箱并将其分配给变量,或者fileinto与之结合regex

编辑:我还了解到,该mailboxexists测试似乎对:regex两者都不起作用。

error: unknown tagged argument ':regex' for the mailboxexists test (reported only once at first occurrence).

答案1

将匹配放入变量并使用它:

require ["fileinto", "regex", "mailbox", "variables"];

if header :regex "Subject" "([1-9][0-9][0-9])" {
    set "mbox_candidate" "INBOX.${1}";
    if mailboxexists "${mbox_candidate}" {
        fileinto "${mbox_candidate}";
        stop;
    }
}

也许整个错误在于添加了:regexformailboxexistsfileinto。我相信你可以直接将其添加${1}到参数中。但无论如何,我还是更喜欢使用额外的变量,以使规则更易于阅读。

相关内容