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:9821
com 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/1
resposta do e-mail de entrada original indica que os DADOS não foram recebidos. Na verdade, o erro parece ocorrer quando o submission
processo tenta adicionar o conteúdo do proxy à fila.
Espero ter explicado tudo claramente, pois realmente precisaria de ajuda nisso...