Esta foi a minha solução final após pesquisa e ajuda do @tarleb
Minha entrega de e-mail estava acontecendo com o programa sendmail
, que adicionava alguns cabeçalhos adicionais ao meu e-mail. Eu poderia usar um mitter (filtro de mensagens) para filtrar e-mails recebidos e descartar o uso de sendmail
, no entanto, decidi mudar para o Dovecot LDA para a entrega.
Meu filtro original foi, no começo do master.cf
:
smtp inet n - - - - smtpd -o content_filter=spamassassin
E no final do arquivo:
spamassassin unix - n n - - pipe
user=debian-spamd argv=/usr/bin/spamc -f -e
/usr/sbin/sendmail -oi -f ${sender} ${recipient}
Alterei o final do arquivo para usar a entrega local da Dovecot por:
spamassassin unix - n n - - pipe
flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e
/usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop}
Agora edite o main.cf
do Postfix e adicione (opcional, marque (3) abaixo):
spamassassin_destination_recipient_limit = 1
Agora o seu email será entregue via Dovecot LDA sem alterações no cabeçalho. Para os curiosos, aqui estão alguns detalhes da minha configuração:
- Essa configuração pode ser usada com delimitadores de mais endereçamento / subendereço / destinatário (emails endereçados a
[email protected]
serão entregues em[email protected]
caixa de entrada) - É por isso que adicionei-d ${user}@${nexthop}
isso removerá o+
e tudo até o domínio. Para ativar esse recurso, não se esqueça de adicionarrecipient_delimiter = +
emmain.cf
; - Minhas bandeiras
flags=DROhu
, elas não adicionam nada anormal, mas elas podem ser entendidas aqui: link ; -
spamassassin_destination_recipient_limit = 1
é necessário para garantir que cada destinatário seja processado individualmente pelo spamassassin. Isso é necessário devido ao sinalD
acima (incluiX-Original-To
header). Se você tiver oD
sinalizador e não definirspamassassin_destination_recipient_limit = 1
o e-mail com vários destinos não será exibido! Se você não se importar com esse cabeçalho, poderá remover o sinalizador e isso não é necessário.
Edit: Conteúdo bônus - Mova seu SPAM para a pasta Junk
!
Você também pode configurar o Dovecot para mover os emails detectados como SPAM para a pasta Junk
IMAP. Isso tornará sua vida mais fácil, com certeza. Apenas siga isto:
-
Edite
/etc/dovecot/conf.d/15-mailboxes.conf
e descomente / adicione a pastaJunk
com (deve estar na seçãonamespace inbox
perto demailbox Trash
):mailbox Junk { special_use = \Junk }
-
Instale
dovecot-sieve
comapt-get install dovecot-sieve
; -
Edite
/etc/dovecot/conf.d/90-sieve.conf
e comente a linha:#sieve = ~/.dovecot.sieve
-
Edite
/etc/dovecot/conf.d/90-plugin.conf
como:plugin { sieve = /etc/dovecot/sieve/default.sieve }
-
Edite
/etc/dovecot/conf.d/15-lda.conf
e/etc/dovecot/conf.d/20-lmtp.conf
para corresponder:protocol lda/lmtp { # do not copy/paste this line! mail_plugins = $mail_plugins sieve }
AVISO : você pode ter outras configurações nas seleções de
protocol
, mantenha-as. A linhaprotocol lda/lmtp
muda nos arquivos, mantenha o original. -
Crie a pasta
/etc/dovecot/sieve/
-
Crie o arquivo
/etc/dovecot/sieve/default.sieve
com este conteúdo:require "fileinto"; if header :contains "X-Spam-Flag" "YES" { fileinto "Junk"; }
-
Altere as permissões da pasta para o seu usuário e grupo de e-mail virtual, como:
chown vmail:vmail /etc/dovecot/sieve/ -R
. Se você perder este dovecot vai reclamar! -
Reinicie tudo:
service postfix restart; service dovecot restart; service spamassassin restart
-
Tente enviar um e-mail para alguns e-mails no servidor (de um servidor externo), primeiro um e-mail normal e depois outro com este assunto:
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
. O segundo email deve entrar na pastaJunk
e o primeiro na sua caixa de entrada.
Se isso não funcionar na sua primeira tentativa, veja os registros: tail -f /var/log/mail.log
e envie o e-mail enquanto tail
estiver em execução. Uma boa configuração de trabalho deve informar stored mail into mailbox 'INBOX'
ou stored mail into mailbox 'Junk'
.