[exim] Реврайт заголовка From

Появилась задача, сделать rewrite заголовка, в зависимости от того, с какого хоста идёт отправка. Иными словами:
— если IP отправителя находится в списке (в данном случае это localhost), то подменять поле From на нужные значения из файла
— во всех остальных случаях заголовки не подменять

Создаём переменную local_sender_host и вписываем в неё все нужные IP. В данном случае это только localhost (@[] — это замена слова ‘localhost‘, так как в роутерах нельзя использовать слово ‘localhost‘)

hostlist local_sender_host = 127.0.0.1:@[]

В самый вверх (перед роутером dnslookup) добавляем такой роутер (проверка принадлежности к списку local_sender_host):

dnslookup_local:
driver = dnslookup
domains = ! +local_domains
transport = remote_smtp
ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8
no_more
headers_add = From: ${extract{name}{${lookup{$sender_address_local_part}lsearch{/etc/exim4/sender.txt}}}} <${extract{email}{${lookup{$sender_address_local_part}lsearch{/etc/exim4/sender.txt}}}}>
headers_remove = From
condition = ${if match_ip{$sender_host_address}{+local_sender_host}{yes}}

где файл /etc/exim4/sender.txt имеет такой вид:

nginx: name="Web user" email=sales@domain.com

В данном случае: nginx — имя системного локального юзера, а name/email — это то, на что будет подменяться заголовок (то, что увидит адресат письма)

Примечание.

Для тестирования этого роутера, очень пригодились такие команды (вывод перенаправляется в файлы /tmp/testX):

# exim -bv -v -d+all -bh 127.0.0.1 user@yandex.ru >/tmp/test1 2>&1
# exim -bv -v -d+all -bh 1.1.1.1 user@yandex.ru >/tmp/test2 2>&1

соответственно для срабатывания роутера dnslookup_local и dnslookup

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *