Добрый день.Есть exim и проблема с bounce. Хочу запретить слать боунс если письмо пришло на не существующий адрес. Для этого добавил в начало acl в конфиг:
______________________________________
begin acl
acl_check_rcpt:
deny domains = local_domains
message = Can't verify recipient
!verify = recipient
______________________________________exim этот блок игнорирует и срабатывает роутер:
rcpt_check_router:
driver = redirect
allow_fail
no_verify
data = "${if eq{}{${lookup mysql{ SQLUSR }}}{:fail: unknown local user}{$local_part@$domain} }"при этом отправителю приходит письмо о невозможности доставки от mail-daemon. как заблокировать отправку этого сообщения а отправителю ответить 550?
заменил :fail: на :blackhole: теперь все письма принимаются и нет боунса. но мне видится некорректным это.
rcpt_check_router:
driver = redirect
allow_fail
no_verify
data = "${if eq{}{${lookup mysql{ SQLUSR }}}{:blackhole: unknown local user}{$local_part@$domain} }"хочется все же делать отлуп без оправки письма отправителю. укажите на путь истинный.
Ну, во-первых, у вас ошибка в первом же правиле - именованный список без начального +
> Ну, во-первых, у вас ошибка в первом же правиле - именованный список
> без начального +Спасибо.Верное замечание, это во время тестирования потерял, но сути дела не меняет этот блок по прежнему игнорируется и уходит на router. Такое ощущение что !verify = recipient всегда верное.
>> Ну, во-первых, у вас ошибка в первом же правиле - именованный список
>> без начального +
> Спасибо.Верное замечание, это во время тестирования потерял, но сути дела не меняет
> этот блок по прежнему игнорируется и уходит на router. Такое ощущение
> что !verify = recipient всегда верное.Ну так в Exim есть мощный режим отладки. Запускайте и смотрите что у вас там (не)срабатывает и почему.
# service exim stop
# exim -bd -q15m -d+all
>>> Ну, во-первых, у вас ошибка в первом же правиле - именованный список
>>> без начального +
>> Спасибо.Верное замечание, это во время тестирования потерял, но сути дела не меняет
>> этот блок по прежнему игнорируется и уходит на router. Такое ощущение
>> что !verify = recipient всегда верное.
> Ну так в Exim есть мощный режим отладки. Запускайте и смотрите что
> у вас там (не)срабатывает и почему.
> # service exim stop
> # exim -bd -q15m -d+allв отладке и смотрю что
> !verify = recipientвсегда проходит. Не зависимо есть пользователь или нет в системе всегда одинаково.
Эта проверка эмулирует доставку через набор роутеров Exim (что хорошо видно в отладке). Т.е. если она проходит, то один из роутеров срабатывает.> в отладке и смотрю что
>> !verify = recipient
> всегда проходит. Не зависимо есть пользователь или нет в системе всегда
> одинаково.
Провел небольшой эксперимент:удалил блок:
> rcpt_check_router:
> driver = redirect
> allow_fail
> no_verify
> data = "${if eq{}{${lookup mysql{ SQLUSR }}}{:fail: unknown
> local user}{$local_part@$domain} }"после этого в логе посыпались ошибки от LDA что нет пользователя получателя и он не может ему письмо доставить.
вернул блок немного изменив его:
rcpt_check_router:
driver = redirect
allow_fail = yes
data = :fail: Unknown local user
no_moreв итоге получил в логе smtp :
rejected RCPT : Unknown local userа отправителю пришел баунс от сервера отправления со значением:
SMTP error from remote mail server after RCPT TO:<nonuser@domain.example>:
550 Can't verify recipient
Взятый из блока:
>begin acl
>acl_check_rcpt:
>deny domains = +local_domains
> message = Can't verify recipient
> !verify = recipientПодскажите я правильно понимаю что письмо приходит на сервер exim пытается отдать его на доставку LDA, тот говорит что нет такого пользователя, и тогда срабатывает роутер по обработке. Если это верно то как все же правильно проверить пользователя не отправляя на LDA а посмотреть его в базе перед приемкой?
Судя по ошибке похоже на то.
Проверка получателя в ACL RCPT делается черезverify = recipient
>[оверквотинг удален]
>>begin acl
>>acl_check_rcpt:
>>deny domains = +local_domains
>> message = Can't verify recipient
>> !verify = recipient
> Подскажите я правильно понимаю что письмо приходит на сервер exim пытается отдать
> его на доставку LDA, тот говорит что нет такого пользователя, и
> тогда срабатывает роутер по обработке. Если это верно то как все
> же правильно проверить пользователя не отправляя на LDA а посмотреть его
> в базе перед приемкой?
Как тогда узнать дошло письмо получателю или нет? Человек может опечататься и будет думать что письмо до адресата дошло.
Лучше выявлять и блокировать тех кто постоянного шлёт на несуществующие адреса.