Добавление кастомных заголовков для исходящих писем в exim

Nov 6, 2017 10:35 · 292 words · 2 minute read exim

Иногда в целях отладки или облегчения поиска в логах почтового сервера exim требуется добавить кастомный заголовок (custom header). Давайте разберемся, как это сделать для всех почтовых сообщений, отправляемых с сервера!

Как оказалось, добавить кастомный заголовок для исходящих писем довольно легко. Считаем, что конфигурация почтового сервера находится в одном файле (/etc/exim/exim.conf). Версия exim:

exim --version
Exim version 4.84_2 #1 built 09-Oct-2016 12:33:06
Copyright (c) University of Cambridge, 1995 - 2014
(c) The Exim Maintainers and contributors in ACKNOWLEDGMENTS file, 2007 - 2014
Berkeley DB: Berkeley DB 5.3.21: (May 11, 2012)
Support for: crypteq iconv() IPv6 PAM Perl Expand_dlfunc TCPwrappers OpenSSL Content_Scanning DKIM Old_Demime PRDR OCSP
Lookups (built-in): lsearch wildlsearch nwildlsearch iplsearch cdb dbm dbmjz dbmnz dnsdb dsearch ldap ldapdn ldapm nis nis0 nisplus passwd sqlite
Authenticators: cram_md5 cyrus_sasl dovecot gsasl plaintext spa
Routers: accept dnslookup ipliteral manualroute queryprogram redirect
Transports: appendfile/maildir/mailstore/mbx autoreply lmtp pipe smtp
Fixed never_users: 0
Size of off_t: 8
Configuration file is /etc/exim/exim.conf

Добавлять кастомный заголовок будем с помощью acl. Для начала в секции MAIN CONFIGURATION SETTINGS находим следующие строки:

...
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
acl_smtp_mime = acl_check_mime

# You should not change those settings until you understand how ACLs work.
...

и добавляем к ним еще одну:

...
acl_not_smtp = acl_check_data

Здесь acl_not_smtp — ACL для не-SMTP сообщений (генерируемых локально с точки зрения exim), подробнее здесь.

Далее уже в секции ACL CONFIGURATION находим блок acl_check_data и в самом его конце (перед accept) добавляем такую строку:

    warn    logwrite   = DEBUG MESSAGE Subject: $h_subject: Custom-User-Email: $h_Custom-User-Email: Campaign-Id: $h_Campaign-Id:

Этим самым для всех исходящих писем будет срабатывать предупреждение (warn), которому мы применяем модификатор logwrite (писать в лог), а далее уточняем, что именно писать в лог: фразу DEBUG MESSAGE и три дополнительных заголовка, необходимых мне для отладки ($h_subject, $h_Custom-User-Email и $h_Campaign-Id).

tweet Share