Мне нужно реализовать решение на моем сервере postfix / dovecot, которое будет выполнять скрипт bash каждый раз, когда приходит сообщение. Для этого я сделал следующее в конфигурации master.cf
myhook unix - n n - - pipe
flags=F user=customUser argv=/path/to/script.sh ${sender} ${recipient}
smtp inet n - - - - smtpd
-o content_filter=myhook:dummy
Работает нормально, если вы не хотите, чтобы электронные письма доставлялись в почтовые ящики через dovecot. Проблема в том, что мне как-то нужно все «выбросить» обратно в голубятню. Или, может быть, есть подход получше, о котором я не знаю.
Я ценю каждую идею или подсказку в этом случае.
Ваш сценарий должен действовать как Пример простого фильтра содержимого из официальной документации Postfix. После postfix отправьте письмо через pipe
, вы должны повторно отправить его через sendmail
команда. Фрагмент с этой страницы
Postfix получает нефильтрованную почту из сети с smtpd (8) сервер, и доставляет неотфильтрованную почту в фильтр содержимого с помощью Postfix труба (8) Агент доставки. Фильтр содержимого вводит отфильтрованную почту обратно в Postfix с помощью команды Postfix sendmail (1), так что Postfix может доставить ее в конечный пункт назначения.
Решил проблему с созданием «собственного» сценария доставки. Фактически, сценарий доставки dovecot все еще используется и находится внутри моего собственного, но перед доставкой сообщения в почтовый ящик мой сценарий выполняет то, что я хочу достичь. Конечно, мне пришлось изменить virtual_transport в main.cf vonfiguration, а также создать ловушку в файле master.cf (как я описал в вопросе).
Обычно вы захотите повторно вставить свои сообщения обратно в постфикс из своего скрипта, вместо использования фильтра содержимого, я думаю, что перед очередью milter может лучше подойти для вашего случая использования.