Я настраиваю локальную виртуальную машину для разработки, и мне удалось перенаправить все электронные письма отправлялись в локальный почтовый ящик, используя virtual_alias_maps
с записью /.*/ username
.
Я бы хотел добавить возможность не перенаправлять электронные письма в локальный почтовый ящик если электронное письмо содержит определенный заголовок.
Или другими словами; если в исходящем письме обнаружен определенный заголовок, отправьте его, но если заголовок отсутствует, его следует перенаправить в локальный почтовый ящик.
Как я смогу добиться этого с помощью Postfix?
Большое спасибо за твою помощь!
Удаление псевдокода из tpml7
if header exist (postfix will checks via header_cheks)
no rewrite --> different instance
else
rewrite with virtual_alias_maps same instance
Постфикс AFAIK может перенаправлять электронную почту, если существует определенный заголовок. См. Функцию REDIRECT на человек header_checks.
К сожалению, на основании приведенного выше псевдокода ваш запрос перенаправляет электронную почту. если определенный заголовок не существует. Я уже пробовал простые обходные пути. Но поскольку ваш запрос напрямую не поддерживался, это решение было немного сложным. Особенно это решение необходимо для изучения постфиксный мультиэкземпляр.
Я напишу здесь план - не точный шаг за шагом - не стесняйтесь спрашивать, было ли что-то еще неясным.
Для этого вам понадобится два мультиэкземпляра. Первый экземпляр выполняет header_checks, Второй экземпляр выполняет нормальные исходящие сообщения.
В первом экземпляре будет два демона smtpd, определенных в master.cf
. Один демон (по умолчанию) слушает *: 25, второй - 127.0.0.1:12525.
Второй экземпляр будет прослушивать 127.0.0.1:22525
##main.cf
# your header filter
header_checks = pcre:/path/to/header_checks
# no rewriting
receive_override_options = no_address_mappings
# send to second instance
relayhost = [127.0.0.1]:22525
virtual_alias_maps = pcre:/your/catch-all
##master.cf
# second smtpd but with rewriting enabled
[127.0.0.1]:12515 inet n - n - - smtpd
-o receive_override_options=
# /path/to/header_checks
/^MyHeader/ FILTER smtp:[127.0.0.1]:12525
Просто настройте как первый экземпляр постфикса без header_checks, relayhost, virtual_alias_maps и receive_override_options (обычная установка постфикса). Установите master.cf так, чтобы он слушал только [127.0.0.1]: 22525. Устанавливать myhostname
так что с первым экземпляром все будет иначе.
Сначала мы определяем два процесса smtpd в master.cf
, один с включенной перезаписью, а другой с отключенной перезаписью. SMTPD с включенной перезаписью по умолчанию существует в master.cf. Теперь мы сделаем эти строки
127.0.0.1:2525 inet n - n - 2000 smtpd
-o receive_override_options=no_header_body_checks,no_address_mappings
Это включит другой процесс smtpd
Здесь псевдокод вашего запроса
if header exist (postfix will checks via header_cheks)
no rewrite
else
rewrite with virtual_alias_maps
Мы реализуем эту логику с помощью header_checks.
Добавьте эту строку в main.cf
header_checks = regexp:/etc/postfix/mycustomheader
Содержание /etc/postfix/mycustomheader
/^X-Your-Header/ FILTER smtp:[127.0.0.1]:2525
Каждый раз, когда postfix обнаруживает X-Your-Header в ваших сообщениях он будет перенаправлять электронную почту второму процессу smtpd, как мы определили ранее. Если заголовок не существует, ваша электронная почта будет проходить через процесс smtpd по умолчанию с включенной перезаписью.