Estou com um problema em um servidor de e-mail dovecot2 com um script de peneira que escrevo. O script deve mover automaticamente os e-mails provenientes de uma lista de e-mails para uma pasta (pelo nome da lista, não pelo ID da lista)
require ["fileinto", "mailbox", "variables", "regex"];
if exists "list-id" {
if header :regex "list-id" "([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])" {
fileinto :create "${1}";
stop;
}
}
Para um e-mail com o cabeçalho
List-Id: RZ Monitoring <rz-monitoring.lists.example.com>
Este script deve mover todos os e-mails para uma pasta "Monitoramento RZ". Mas, por algum motivo, todos os e-mails estão se acumulando na caixa de entrada.
O script está sendo executado e não tenho erros em meus logs, portanto devo ter cometido um erro no próprio script.
Responder1
ODocumentos da peneira Dovecotnão está claro sobre isso - acho que você teria que se aprofundar nas RFCs - mas acho que o exists
operador diferencia maiúsculas de minúsculas, embora :regex
não seja. Então você deve usar List-Id
em vez de list-id
:
if exists "List-Id" {
if header :regex "List-Id" "([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])" {
fileinto :create "${1}";
stop;
}
}
Responder2
Então funcionou o seguinte:
require ["fileinto", "mailbox", "variables", "regex"];
if exists "List-Id" {
if header :regex "List-Id" "([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])" {
fileinto :create "${1}";
stop;
}
}
Como Andrew Schulman apontou, parece que “existe” diferencia maiúsculas de minúsculas. Depois de corrigir isso, encontrei um erro nos logs. Na expressão regular
([a-zA-Z0-9][a-zA-Z0-9-_. ]+[a-zA-Z0-9.])
^
este "-" é interpretado como um intervalo de "9" a "_", e isso não é válido (embora, pelo que entendi de regex, não deveria. Possivelmente uma peculiaridade da implementação de regex de pombas). Então o "-" aqui tem que ser escapado
([a-zA-Z0-9][a-zA-Z0-9\\-_. ]+[a-zA-Z0-9.])