Немного оптимизировала, а то было 2 лишних прохода и не обрабатывалась совсем авторизованная почта.LOCAL_CONFIG
Kstorage macro
# Индикатор обязательности или ненужности проверки. По умолчанию заголовок X-Mailer не проверяется
D{XM_check}NO
LOCAL_RULESETS
SLocal_check_mail
R$* $: < $&{client_addr} > $| $1
# Почта, исходящая с самого почтовика, проверке не подвергается
R< 127.0.0.1 > $| $+ $@ OK
# Почта, исходящая из локальной сети проверке подвергается
R< $=R $* > $| $+ $: $(storage {XM_check} $@ YES $) < $&{client_addr} > $| $1
R< $=R $* > $| $+ $@ OK
# Осталась почта, исходящая с внешних адресов. Она может оказаться неавторизованной.
R$* $: < $&{auth_authen} > $| $1
# Тогда заголовок X-Mailer не нужно проверять - заканчиваем рулсет
R<> $| $+ $@ OK
# Она может оказаться авторизованной. Тогда это наш клиент, и заголовок X-Mailer нужно проверить
R$+ $| $+ $: $(storage {XM_check} $@ YES $)
HX-Mailer: $>CheckMailer
SCheckMailer
# Добавляем значение макроса XM_check, чтобы решить, стоит ли делать дальнейшую проверку
R$+ $: <$&{XM_check}> $1
# проверяем состояние индикатора {XM_check}. Если NO - сразу заканчиваем рулсет.
R<NO>$+ $@ OK
# В противном случае сначала
# записываем в макрос X-M состояние заголовка X-Mailer.
# Если X-Mailer присутствует в заголовке письма, в макрос X-M запишется OK
# Если этот заголовок вовсе отсутствует, то макрос X-M будет пустой, так как
# рулсет SCheckMailer вовсе исполняться не будет при отсутствующем X-Mailer
R<YES>$+ $: $(storage {X-M} $@ OK $) $1
# проверяем заголовок X-Mailer
RThe Bat $+ $@ OK
R$+ $#error $@ 5.0.0 $: <$&f>: "550 Please use The Bat mailer."
Scheck_eoh
# Снова вызываем значение макроса XM_check, чтобы решить, стоит ли делать дальнейшую проверку
R$+ $: <$&{XM_check}>
R<NO> $@ OK
# Не умудрился ли часом наш клиент отправить почту с отсутствующим заголовком X-Mailer
R$* $: <$&{X-M}>
# Нет - пропускаем
R<OK> $@ OK
# Да, заголовк отсутствует. Далее на ваше усмотрение: или
R<> $#error $@quarantine $: <$&f>: "550 Please use The Bat mailer."
или
R<> $#error $@ 5.0.0 $: <$&f>: "550 Please use The Bat mailer."