Как я могу настроить exim для запуска сценария для каждого электронного письма

Мне нужно запустить сценарий оболочки под exim, который может читать каждое входящее электронное письмо, опционально перезаписывать их, а затем продолжать отправлять электронное письмо.

И идеальным решением будет аналог UNIX-труб:

cat *incoming email* | **some-script.sh** | *back to exim processing*

Я хочу, чтобы скрипт запускался очень рано, чтобы я мог, например, изменить адрес назначения.

Возможно ли это с помощью Exim и как?


person frodeborli    schedule 30.08.2017    source источник


Ответы (1)


Вы можете создать маршрутизатор, который использует транспорт канала с вашим скриптом на другой стороне канала:

begin routers
preprocessor:
    driver      = accept
    condition   = if{ !eq{$header_X-Preproceeded}{yes}}
    transport   = myscript
    no_more

. . . . .

begin transports
myscript:
    driver      = pipe
    user        = scriptowner
    command     = /path/to/script --opt1 --opt2

Если входящее сообщение не имеет заголовка X-Preproceeded или его значение не равно yes, то сообщение передается на транспорт myscript. Это выполняется через конвейер source | script, и все сообщения передаются в скрипт stdin. После продолжения, если вы хотите вернуть обработанное сообщение в exim, вы должны добавить заголовок x-Preproceeded: yes к сообщению, чтобы предотвратить его перенаправление на следующий круг. Затем вы должны отправить его с помощью команды sendmail.

#!/bin/sh
. . . . 
mandatory_empty_line = ''
cat << ENDOFTEXT | /usr/sbin/sendmail -t
$headers
X_Preproceeded: yes
$mandatory_empty_line
$message_body
ENDOFTEXT

Имейте в виду, что эффективный пользователь, запускающий скрипт, должен быть добавлен к доверенным пользователям с помощью конфигурации exim, чтобы разрешить отправку с произвольного адреса. В противном случае exim заменит любой адрес отправителя на [email protected].

person Kondybas    schedule 30.08.2017