O que você está descrevendo é perfeitamente viável, mas o Sendmail irá produzir uma mensagem de rejeição nesta situação; isso faz parte do design do protocolo. A maneira de fazer isso é fazer o Procmail abortar com um código de saída adequado, para comunicar o motivo do retorno ao Sendmail.
Por exemplo, para retornar um erro "desconhecido do usuário",
:0
* ^Received: from badhelo \(badhost \[10\.9\.8\.7\]\) by yourhost
{ EXITCODE=67 HOST= }
O EXITCODE
especifica com qual código de retorno sair, e reatribuir HOST
tem o efeito colateral obscuro, mas bem documentado, de abortar o Procmail imediatamente.
Consulte o link para obter mais detalhes e, por exemplo, sysexits.h
para uma lista dos códigos de saída reais.
Você não terá controle sobre se isso acontece durante ou após a conclusão da transação SMTP. Minha lembrança de quando o Sendmail ainda era popular era que ele de fato processaria as regras do Procmail enquanto a mensagem estava sendo recebida, mas isso é um detalhe de implementação que pode depender de várias circunstâncias, e talvez mudar entre as versões. De qualquer forma, o SMTP é um protocolo de armazenamento e encaminhamento; se a transação falhar e o cliente já tiver desconectado, o servidor tentará se conectar ao servidor MX do remetente para entregar a devolução. (Existem situações em que isso é indesejável; portanto, por exemplo, uma devolução de uma rejeição não deve ser gerada e entregue.)
De qualquer forma, para que o Procmail possa processar qualquer coisa, você precisará receber a mensagem inteira; explicitamente a falha da transação DATA
do SMTP neste estágio final é bastante inútil, pois você não pode desfazer o recebimento. Se você quiser abandonar uma mensagem silenciosamente quando o DATA
for concluído, basta entregá-lo em /dev/null
.
Dito isto, é benéfico rejeitar o mais cedo possível. Se você puder implementar um bloco de nível de IP contra os remetentes inválidos, isso seria muito mais simples e gentil na pilha de rede. (Entre as linhas que estou lendo, "rede zumbi" - você sabe se esses remetentes estão bloqueados, por exemplo, pelos DNSBLs da Spamhaus?)