O problema que você enfrentou está na ordem de execução da peneira. Você precisa renomear a regra de plug-in de after
para before
plugin {
sieve_plugins = sieve_imapsieve sieve_extprograms
imapsieve_mailbox1_name = INBOX
imapsieve_mailbox1_before = file:/etc/dovecot/sieve/default.sieve
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment
}
Em seguida, suas mensagens serão processadas por default.sieve
e serão interrompidas antes da entrega normal se *SPAM*
padrão estiver presente no assunto.
Meu strong conselho é usar o nome como before1.sieve
em vez de default.sieve
para sieve_before porque default.sieve
tem um significado especial. Também seria muito melhor adicionar algum cabeçalho especial à mensagem como X-SPAM-DETECTED
em vez de manipulações de assunto.
UPDATE
Aqui está minha solução completa. Eu usei exim
para o MTA e dovecot
para entrega / peneiramento
exim
tem uma ACL que invoca o spamassassin
para calcular a pontuação da mensagem.
Dois cabeçalhos personalizados são adicionados se a pontuação estiver acima do limite:
acl_data:
warn spam = spamd
condition = ${if >{$spam_score_int}{49}}
add_header = X-Spam-Score: $spam_score_int
add_header = X-Spam-Ooops: Detected
accept
Em seguida, o roteador passa a mensagem para o transporte:
local:
driver = accept
condition = <some site specific code>
transport = dovelda
O transporte é óbvio:
dovelda:
driver = pipe
user = mailnull
command = /long/path/deliver -d $local_part@$domain -f $sender_address
envelope_to_add
return_path_add
delivery_date_add
log_output
deliver
depende da configuração do dovecot:
plugin {
sieve_plugins = sieve_imapsieve sieve_extprograms
sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.environment
sieve_pipe_bin_dir = /usr/local/etc/dovecot
## Two sieves only - common and personal
sieve_before = /long/path/common.sieve
sieve_dir = /var/mail/%d/%n
sieve = /var/mail/%d/%n/user.sieve
. . . . . . .
}
common.sieve
é bem simples:
####
require "fileinto";
require "variables";
require "imap4flags";
if exists "X-Spam-Ooops"
{
fileinto "Junk";
stop;
}
elsif anyof (header :contains "From" "postmaster@")
{ ## postmaster's message should be delivered at any cost
setflag "flagvar" "\Flagged";
fileinto :flags "${flagvar}" "INBOX";
stop;
}
else
{
## Trigger to launch the next script in the sequence
keep;
}
####
Isso é tudo. Qualquer mensagem com pontuação acima permitida será marcada pelo cabeçalho X-Spam-Ooops
e colocada na subpasta Junk
do usuário.