当我在网站上注册时,我在我的电子邮件中使用他们的域名,例如[email protected]。 我想使用sieve将每个域文件都存入一个单独的IMAP文件夹中,并创build了以下脚本:
if envelope :regex "to" ["^(.*\\.uk)@", "^(.*\\.com)@", "^(.*\\.org)@"] { set :lower "fromdomain" "${1}"; if string :is "${fromdomain}" "" { keep; } else { fileinto "domains.${fromdomain}"; } }
但是,我的服务器configuration为使用'。' 作为文件夹分隔符,所以这个电子邮件将进入:
domains serverfault com <<<
代替:
domains serverfault.com <<<
因为我很高兴“serverfault com”我试过寻找一个stringreplace函数,但sieve似乎没有一个。 直接连接,即serverfaultcom会变得混乱。
我需要域的所有部分,以便test.serverfault.com和serverfault.co.uk分开提交。
还有另外一个可以做到这一点的诀窍,或者有什么关系吗
邮件服务器使用Bytemark的Symbiosispipe理工具在debian-jessie上托pipe。
我用这个规则来pipe理它:
if envelope :regex "to" "([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)\\.?([^.]*)@.*$" { if string :is "${1}" "" {} else { set :lower "part1" "${1} "; } if string :is "${2}" "" {} else { set :lower "part2" "${2} "; } if string :is "${3}" "" {} else { set :lower "part3" "${3} "; } if string :is "${4}" "" {} else { set :lower "part4" "${4} "; } if string :is "${5}" "" {} else { set :lower "part5" "${5} "; } if string :is "${6}" "" {} else { set :lower "part6" "${6} "; } set "targetfolder" "${part1}${part2}${part3}${part4}${part5}${part6}"; if string :is "${targetfolder}" "" {} else { fileinto "domains.${targetfolder}"; } }
正则expression式是重复的([^。] *)\。 直到最后一个。 直到有一个点,这捕获非点。 最后只是省略了最后一个点,并且从@到地址的末尾。
然后为每个捕获的string,如果它不是空的,我添加一个空格后。 如果它是空的,它不会得到一个空间,该部分保持空白。 你需要“部分”,因为你不能指定匹配variables。
然后将所有string与空格或空格连接起来,以获得我想要的文件夹名称。