Isso provavelmente poderia ser conseguido configurando seu script como um milter - veja MILTER_README. Pode ser uma tarefa não trivial. Talvez valha a pena ver se alguém já implementou algo suficientemente bom para o seu propósito, por ex. aqui .
Encontrei vários documentos de referência e postagens sobre perguntas e respostas relacionadas a esse tópico, mas não consegui descobrir uma área-chave do design.
Eu gostaria de rejeitar um email de entrada com base em um algoritmo de análise personalizado - simplesmente eu tenho um script python que faz a análise e estou testando, invocando-o como um filtro de email do Gnome Evolution. Tudo isso parece funcionar mais ou menos como esperado. Parece ser um par de nuances com códigos de retorno em python vs. a interpretação pelo sistema de filtragem de e-mail da Evolutions, mas de outra forma operacional.
Nesta fase, não vinculado a uma tecnologia ou sistema que não seja de código aberto. Idealmente, ele deve rodar no Debian (ou Ubuntu), então o Postfix parece ser o mais adequado.
Eu tenho procurado por gateways e outros, como o Postfix, para projetar uma integração que funciona em um nível mais autônomo - e para evitar a necessidade de perder tempo filtrando e-mails nas caixas de entrada. Posso ver o peso leve antes dos filtros de fila (por exemplo, aqui ) e eu posso ver como chamar um script desses ganchos, por exemplo aqui , mas não adquire nenhum código de retorno do script.
O que não consigo encontrar na documentação é como você aplicaria um código de resultado / código de retorno do script ao Postfix para determinar se deve ou não permitir ou rejeitar a mensagem.
Note que a solução depende de ser capaz de rejeitar uma mensagem de e-mail, e não descartá-la (por razões que infelizmente não posso entrar aqui). Pensei em uma tarefa do cron que inspeciona uma lista de itens de dados agrupados coletados do email adicionado à fila e que acrescenta mais filtros às configurações do Postfix automaticamente. Isso resolve apenas parte do problema e significa que algo será executado no servidor, mesmo que não haja novo e-mail.
TL; DR Então, minhas perguntas são:
scan.py
e obtenha um 0
ou 1
voltar Isso provavelmente poderia ser conseguido configurando seu script como um milter - veja MILTER_README. Pode ser uma tarefa não trivial. Talvez valha a pena ver se alguém já implementou algo suficientemente bom para o seu propósito, por ex. aqui .