в Документация Exim для использования sender = verify в ACL переменная $ sender_address_data должна быть установлена в ACL после опции verify = sender, используемой в ACL RCPT: "Если есть данные в переменной $ address_data в конце маршрутизации , его значение помещается в $ sender_address_data в конце проверки ".
Но для меня это всегда пусто. При каких условиях $ sender_address_data будет непустым?
Пример:
acl_smtp_rcpt:
...
accept
authenticated = *
verify = sender
logwrite = authenticated user '$authenticated_id' sending as '$sender_address' which \
is '$sender_address_data', if error: '$sender_verify_failure'
Результаты в сообщениях журнала с всегда пустым $ sender_address_data и без ошибок проверки:
authenticated user 'user1' sending as 'alias1@example.com' which is '', if error: ''
Exim4 устанавливает $ sender_address_data только тогда, когда $ sender_address установлен в маршрутизаторе от человека, пишущего файл конфигурации и не сбрасывается какой-либо другой командой на конце принимающего маршрутизатора; Сам exim никогда не устанавливает значение автоматически. Например, это устанавливает $ address_data в локальную часть адреса электронной почты, и значение будет доступно как $ sender_address_data в ACL, который вызвал маршрутизацию или проверку:
acl_check_rcpt:
...
accept
authenticated = *
verify = sender # TRIGGER ROUTER
logwrite = sender is local user '$sender_address_data' # USE HERE
...
begin routers
...
local_user:
driver = accept
domains = +local_domains
check_local_user
transport = LOCAL_DELIVERY
address_data = ${local_part} # SET HERE