Ich habe mit Postfix auf NodeJS einen Before-Queue-Filter erstellt, um die Daten aus ausgehenden E-Mails abzurufen, die Anhänge zu entfernen, sie auf ein CDN hochzuladen und die URLs wieder in die ausgehende E-Mail einzufügen.
Bisher nichts allzu kompliziertes, denke ich, da Postfix dies über dieInhaltsfilter vor der Warteschlange.
Nachdem ich den Filter implementiert und die Postfix-Dokumentation befolgt habe, kann ich ausgehende E-Mails abrufen und an Postfix zurücksenden.
Postfix erkennt jedoch nicht, dass die eingehende E-Mail über die „proxy“-spezifische Konfiguration über den Inhaltsfilter vor der Warteschlange zurückgesendet wird. Es fügt sie zwar weiterhin der Warteschlange hinzu und sendet sie ordnungsgemäß, schließt die vom SMTP-Client geöffnete Sitzung jedoch zunächst nicht.
Ich beschäftige mich seit einigen Wochen mit diesem Fehler und habe das gesamte Internet nach Antworten durchsucht, aber dieses Thema scheint nicht gut dokumentiert zu sein. Ich habe gesehen, dass Milters eine weitere Lösung für das Problem sein könnte, aber es scheint komplizierter zu sein, als einfach SMTP zur Kommunikation mit Postfix zu verwenden.
Hier sind die Konfigurationsdateien:
master.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
(diese Konfiguration ist für den Einsatz in der Produktion nicht sicher, aber ich habe versucht, so viel Komplexität wie möglich zu entfernen)
127.0.0.1:9830
ist der Inhaltsfilterserver vor der Warteschlange und ich habe Postfix so konfiguriert, dass es 127.0.0.1:9821
mit der zweiten Konfiguration der Datei auf zurückkehrende E-Mails wartet.
Folgendes sende ich mit meinem Filter an Postfix zurück:
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
Hier ist die Ablaufverfolgung der Filterprotokolle: Protokolliert, wenn eine Mail über den Filter versendet wird
Und hier ist, was ich bei Postfix gesehen habe: Proxy-Reject: Fehler beim Schreiben der Warteschlangendatei
Alle Befehle wurden von Postfix erkannt, als der Filter sie sendete, aber die data=0/1
Antwort der ursprünglichen eingehenden E-Mail zeigt an, dass die DATEN nicht empfangen wurden. Tatsächlich scheint der Fehler aufzutreten, wenn der submission
Prozess versucht, den Proxy-Inhalt in die Warteschlange einzufügen.
Ich hoffe, dass ich alles klar erklärt habe, da ich hierbei wirklich Hilfe bräuchte ...