Substituir caracteres em uma variável de peneira

1

Quando me registro em sites, uso o domínio deles no meu e-mail, por exemplo, [email protected]. Gostaria de arquivar cada domínio em uma pasta IMAP separada usando peneira e criei o script abaixo:

if envelope :regex "to" ["^(.*\.uk)@", "^(.*\.com)@", "^(.*\.org)@"] {
  set :lower "fromdomain" "${1}";
  if string :is "${fromdomain}" "" {
    keep;
  } else {
    fileinto "domains.${fromdomain}";
  }
}

No entanto, meu servidor está configurado para usar '.' como o separador de pastas para que este e-mail fosse enviado:

domains
  serverfault
    com      <<<

em vez de:

domains
  serverfault.com      <<<

Como eu ficaria feliz com "serverfault com" Eu tentei procurar por uma função de substituição de seqüência de caracteres, mas peneira não parece ter um. Concatenação direta, ou seja, serverfaultcom, seria confusa.

Eu precisaria de todas as partes do domínio para que test.serverfault.com e serverfault.co.uk sejam arquivados separadamente.

Existe outro truque que pode fazer isso ou algo próximo?

O servidor de e-mail está hospedado no debian-jessie usando as ferramentas administrativas Symbiosis do Bytemark.

    
por Stephen Turner 24.05.2017 / 10:21

1 resposta

0

Eu consegui com essa regra:

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}";
  }
}

O regex é uma repetição ([^.] *) \. até o último. Isso captura os não-pontos até que haja um ponto. O último apenas omite o último ponto e corresponde de um @ ao final do endereço.

Então, para cada string capturada, se não estiver vazia, adiciono um espaço após ela. Se estiver vazio, não terá espaço e essa parte ficará vazia. Você precisa de "parte", como você não pode atribuir para coincidir com variáveis.

Eu então concateno todas as strings com espaços ou vazios para obter o nome da pasta que quero.

    
por 24.05.2017 / 20:37