Я обслуживаю IMAP-сервер под управлением FreeBSD, который использует exim 4.80 в качестве своего MTA. Прямо сейчас я пытаюсь создать псевдоним электронной почты, чтобы я мог обращаться ко всем пользователям системы и информировать их о запланированных простоях и т.п. Идея в том, что письмо на vmailusers@imap.mydomain.com
должны быть отправлены всем пользователям в системе.
Сначала я подумывал о простом простом /etc/aliases
но заметил, что это не то, что я хочу, поскольку у пользователей системы могут быть фильтры Sieve, которые отбрасывают все входящие письма, кроме нескольких из белого списка.
Я заметил, что exim можно настроить для доставки в локальный каталог Maildir сразу (минуя любые другие MDA и, таким образом, обходя фильтры Sieve), используя добавление файлового транспорта - но как я могу сделать одну входящую почту на vmailusers
перенаправить на множественный местные мейлдиры?
Вы можете использовать маршрутизатор перенаправления для обработки сообщений псевдонима. Это также тот, который запускает скрипты / пересылает файлы, предоставленные пользователями. Обработка маршрутизаторов происходит сверху вниз, поэтому пример ниже работает примерно так:
syswide_alias
маршрутизатор проверяет псевдонимы в /etc/aliases
файл. Если он обнаружен, последовательность маршрутизации возобновляется.original_local_part
переменная, которая пуста, если пересылка не выполнялась. Если поиск успешен, сообщение доставляется. В этом случае обработка останавливается (поскольку доставка была выполнена), поэтому любые фильтры или пересылки, которые мог иметь пользователь, игнорируются.forced_delivery
маршрутизатор отказывается, .forward
файл будет обработан. Если этот файл содержит псевдонимы, последовательность маршрутизации перезапускается.В routers
раздел должен выглядеть так:
syswide_alias:
driver = redirect
allow_defer
allow_fail
data = ${lookup{$local_part}lsearch{/etc/aliases}}
forced_delivery:
driver = accept
allow_defer
transport = local_delivery
condition = ${if eq {${lookup{$original_local_part}lsearch{/etc/aliases}}}{}{no}{yes}}
user_filters:
driver = redirect
allow_defer
allow_fail
allow_filter
file = ${home}/.forward
normal_delivery:
driver = accept
check_local_user
transport = local_delivery
Оба syswide_alias
и forced_delivery
маршрутизаторы имеют allow_defer
опция, которая нужна, если файл не найден (что, вероятно, не так, но все равно не повредит)
Редактировать: Приведенный выше пример теперь содержит полный набор маршрутизаторов, необходимых для достижения поставленных целей.