Я создаю фильтр перед постановкой в очередь с помощью Postfix на NodeJS, чтобы извлекать данные из исходящих писем, удалять вложения, загружать их на CDN и вставлять URL-адреса обратно в исходящие письма.
Пока, я думаю, ничего сложного, так как Postfix поддерживает это черезФильтр содержимого перед очередью.
После внедрения фильтра и соблюдения документации Postfix я могу извлекать исходящие письма и отправлять их обратно в Postfix.
Однако Postfix не распознает входящую почту через конфигурацию, специфичную для "proxy", как вставленную обратно через фильтр содержимого до очереди. Он все равно добавит ее в очередь и отправит ее должным образом, но не закроет сеанс, открытый клиентом SMTP.
Я уже несколько недель смотрю на эту ошибку и просматриваю весь интернет в поисках ответов, но эта тема, похоже, не очень хорошо документирована. Я видел, что Milters может быть другим решением проблемы, но это кажется более сложным, чем просто использование SMTP для связи с Postfix.
Вот файлы конфигурации:
мастер.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
(эта конфигурация небезопасна для использования в продакшне, но я постарался максимально упростить ее)
127.0.0.1:9830
является сервером фильтрации содержимого перед очередью, и я настроил Postfix на прослушивание возвращаемых писем 127.0.0.1:9821
с помощью второй конфигурации файла.
Вот что я отправляю обратно в Postfix, используя свой фильтр:
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
Вот след в журналах фильтра: Регистрирует отправку почты с использованием фильтра
И вот что я увидел на Postfix: proxy-reject : ошибка записи файла очереди
Все команды были обнаружены Postfix, когда фильтр их отправлял, но data=0/1
ответ исходной входящей почты указывает на то, что ДАННЫЕ не были получены. Фактически, ошибка, похоже, происходит, когда процесс submission
пытается добавить содержимое прокси в очередь.
Надеюсь, я все понятно объяснил, так как мне действительно понадобится помощь по этому вопросу...