O filtro de conteúdo antes da fila não injeta dados de volta no Postfix

O filtro de conteúdo antes da fila não injeta dados de volta no Postfix

Estou construindo um filtro antes da fila com Postfix no NodeJS para recuperar os dados dos e-mails enviados, remover os anexos, carregá-los em um CDN e injetar de volta os URLs nos e-mails enviados.

Até agora, nada muito complicado, eu acho, já que o Postfix suporta fazer isso através doFiltro de conteúdo antes da fila.

Depois de implementar o filtro e seguir a documentação do Postfix, consigo recuperar os e-mails enviados e enviá-los de volta ao Postfix.

No entanto, o Postfix não reconhece o e-mail recebido por meio da configuração específica do "proxy" como sendo injetado de volta por meio do filtro de conteúdo antes da fila. Ele ainda irá adicioná-lo à fila e enviá-lo corretamente, mas não fechará a sessão aberta pelo cliente SMTP inicialmente.

Estou analisando esse bug há algumas semanas e naveguei por toda a web em busca de respostas, mas esse assunto não parece estar muito documentado. Vi que Milters poderia ser outra solução para o problema, mas parece mais complicado do que apenas usar SMTP para se comunicar com o Postfix.

Aqui estão os arquivos de configuração:

mestre.cf:

submission inet n                               -                               -                               -      smtpd
        -o syslog_name=postfix/submissions
        -o smtpd_proxy_filter=127.0.0.1:9830
        -o smtpd_proxy_ehlo=mail.clebard.cloud
        -o smtpd_proxy_options=speed_adjust
        -o smtpd_tls_auth_only=no
        -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
        -o smtpd_enforce_tls=no
        -o smtpd_tls_security_level=may
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject
127.0.0.1:9821  inet    n                       -                       -                       -                      smtpd -v
        -o smtpd_authorized_xforward_hosts=127.0.0.0/8
        -o syslog_name=postfix/afterfilter
        -o smtpd_enforce_tls=no
        -o smtpd_tls_auth_only=no
        -o smtpd_tls_dh1024_param_file=${config_directory}/dh2048.pem
        -o smtpd_enforce_tls=no
        -o smtpd_tls_security_level=may
        -o smtpd_sasl_auth_enable=yes
        -o smtpd_client_restrictions=permit_sasl_authenticated,reject

(esta configuração é insegura para ser usada em produção mas tentei remover o máximo de complexidade possível)

127.0.0.1:9830é o servidor de filtro de conteúdo antes da fila e configurei o Postfix para escutar o retorno de e-mails 127.0.0.1:9821com a segunda configuração do arquivo.

Aqui está o que envio de volta ao Postfix usando meu filtro:

EHLO localhost
AUTH PLAIN {token}
XFORWARD HELO={client_name} NAME={client_name} ADDR={client_addr} PROTO=SMTP
XFORWARD IDENT={message_id}
MAIL FROM: {sender}
RCPT TO: {recipient}
DATA
...
.
QUIT

Aqui está o rastreamento nos logs de filtro: Registra quando um e-mail é enviado usando o filtro

E aqui está o que tenho visto no Postfix: proxy-reject: erro de gravação do arquivo da fila

Todos os comandos foram detectados pelo Postfix quando o filtro os enviou, mas a data=0/1resposta do e-mail de entrada original indica que os DADOS não foram recebidos. Na verdade, o erro parece ocorrer quando o submissionprocesso tenta adicionar o conteúdo do proxy à fila.

Espero ter explicado tudo claramente, pois realmente precisaria de ajuda nisso...

informação relacionada