Estou tentando fazer o filtro blow Sieve funcionar
require ["fileinto", "imap4flags", "mailbox", "body", "envelope", "vnd.dovecot.pipe", "variables", "vnd.dovecot.execute"];
if envelope :matches "To" "*@*" {
set "recipient" "${0}";
set "user" "${1}";
set "recip_domain" "${2}";
}
if envelope :matches "From" "*" {
set "sender" "${0}";
}
#Check if recipient is valid user
if execute :output "valid_user" "user-verification" "${recipient}" {
if string :matches "${valid_user}" "True" {
if body :raw :contains ["message/notification"] {
setflag "\\Seen";
fileinto :create "Notifications";
stop;
}
}
}
Where user-verification
é um extprogram que chama a API e verifica o usuário com base no endereço de e-mail e retorna booleano (como uma saída para o console).
Tudo funciona bem quando vou remover a if string :matches "${valid_user}" "True"
instrução de outra forma, parece que não está reconhecendo a valid_user
variável.
Quando eu canalizo valid_user
para algum script apenas para capturar o valor dessa variável, ele gera um erro:
erro: especificado :args item `True?' é inválido.
Por que o ponto de interrogação foi adicionado à variável neste caso?
Pensamentos?
Nesse caso, "True" é seguido por uma nova linha, que o Sieve lê com prazer e inclui no valor da variável.
Para tê-lo corrigido, o
user-verification
script deve produzi-lo sem uma nova linha.