Появилась задача, сделать 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