如何在 Dovecot 的 Sieve 中创建文件夹但不订阅它?

如何在 Dovecot 的 Sieve 中创建文件夹但不订阅它?

我有筛选规则:

 if header :contains "subject" ["TOP-SECRET"] {
    setflag "\\Seen";
    fileinto :create "Hidden-Folder";
    stop;
}

基于此,TOP-SECRET将主题中包含的任何内容移动到hidden-folder并设置为已读。

有没有办法Hidden-Folder通过 sieve 将其设置为未订阅(从文件夹列表中隐藏)?或者如何“管道”哪个帐户订阅文件必须通过脚本进行编辑?

答案1

我认为没有选项可以配置这样的行为——无论是在 Sieve 还是在 Pigeonhole 或 Dovecot 配置中。

但我可以提出一个解决方法:创建一个未订阅的隐藏文件夹并将子目录放入其中。

如果您创建一个文件夹,Hidden-Folder并将其定义为未订阅(手动或使用doveadm),则操作fileinto :create "Hidden-Folder.Foo" will create the folderfoo insideHidden-Folder`,但不会自动订阅它。

你当然也可以使用vnd.dovecot.executedoveadm mailbox unsubscribe在运行后运行取消订阅邮箱fileinto,甚至在提交邮件之前创建邮箱(而不订阅它)。不过,通过 Sieve 执行系统命令感觉不太好;即使它只是一个带有经过严格检查的参数的预定义命令。

答案2

经过一些测试后,我通过将其传输到外部脚本获得了所需的功能。

筛选代码如下:

if envelope :matches "To" "*@*" {
  set "recipient" "${0}";
}

     if header :contains "subject" ["TOP-SECRET"] {
        setflag "\\Seen";
        fileinto :create "Hidden-Folder";
        pipe "my-script" ["${recipient}"]; 
        stop;
    }

那么筛管my-script代码看起来像

#!/bin/bash

mbox=$1
result=`find /mnt/var/mailboxes -type d -name $mbox`
perl -pi -e 's/Hidden-Folder//g' $result/subscriptions

附注 - 确保所有邮箱的所有者/mnt/var/mailboxes都是 Dovecot。

相关内容