Você pode configurar outro processo de ouvinte smtp em seu master.cf para manipular seus e-mails enviados. Algo como o seguinte deve começar com uma escuta na porta 26:
26 inet n - n - 18 smtpd -o header_checks=[your checks] mydestination= relayhost=
Você pode precisar ajustar um pouco, desativar a entrega local e não aceitar mensagens de qualquer lugar, exceto localhost. Em seguida, você deseja adicionar o seguinte ao seu main.cf
relayhost=127.0.0.1:26
E, claro, deixe suas verificações de cabeçalho fora desse arquivo.
O e-mail seria retransmitido para o segundo processo do smtpd em 26, o qual deixaria cair mensagens que falham como spam. Você também pode especificar um host de reencaminhamento nesse ouvinte se precisar passar seu e-mail para um servidor de recebimento de dados em vez de entregar diretamente.
Você poderia então configurar o restante de sua filtragem para seus usuários locais com o Dovecot como você já havia sugerido.
Você certamente desejará saber quantos e-mails você adiciona à sua mensagem ao fazer isso, pois alguns provedores de e-mail soltarão mensagens com um número considerável de saltos (o Gmail, por exemplo, cai depois de 10 ou 15