Давайте кое-что проясним:
Первое:
Данное условие проверяет переменную (я так это понимаю)
$authenticated_id.
Данное условие сработает, если переменная будет пуста, т.е. пользователь не аутентифицирован.
Образно можно записать так:
Вот что написано в документации:
http://www.lissyara.su/doc/exim/4.62/string_expansions/
# $authenticated_id
Когда сервер полностью аутентифицирует клиента, то это (видимо, в этот момент) может быть сконфигурировано для сохранения части аутентификационной информации в переменной “$authenticated_id” (смотрите раздел 33). Например, конфигурация аутентификатора user/password могла бы сохранить имя пользователя, для использования в роутерах. Отметтьте, что это не таже самая информация, которая сохраняется в “$sender_host_authenticated”. Когда сообщение посылается локально, не через TCP соединение, переменная “$authenticated_id” содержит имя пользователя вызвавшего процесса.
Добавим ваши предположения:
Предположим что:
Код: Выделить всё
relay_from_hosts = 192.168.1.1 : 192.168.1.2
Тогда наш фильтр примет вид:
Код: Выделить всё
!authenticated = * : !192.168.1.1 : !192.168.1.2
Данное условие будет истинным (т.е. сработает как !authenticated = что-то там....) при условии, что:
1. $authenticated_id пуста
или
2. В переменной $authenticated_id не находятся
некие данные (Мы же не хосты проверяем!! Хосты проверяются hosts = ...), а именно 192.168.1.1 или 192.168.1.2
Итого непонятно зачем добавлять собственное условие, если оно будет срабатывать
только в том случае, и только тогда, когда
$authenticated_id пуста
Вобщем объяснил как смог по этому поводу.
Второе:
при этом, с использованием defer, вместо defer_ok, перестаёт доходить вообще любая почта, с ошибкой:
bad time value
Вот это мне и не понятно, почему так.
Ненашёл я такой опции - defer.
defer_ok есть и очень рекомендую.
А причина ошибки видимо в том, как понимает это exim.
Он разбирает опции (предполагаю) так:
1. Находит основные опции (выделю красным)
!verify = sender/callout=5s,defer,maxwait=30s
defer - не выделяю, не знает он такой опции.
2. Далее присваивает им указанные пользователем данные и в итоге получается список переменных:
sender =
callout=5s,defer, (Скорее всего запятые как-то обрезаются)
maxwait=30s
Итого в переменной
callout оказывается значение
5s,defer.
Т.к. в данной опции программой предусмотрено только время, ошибка очевидна.
Третье:
для того, чтобы если при проверке обратным вызовом удалённый smtp сервер не отвечает, то проверка была успешна, иначе при использовании defer_ok, с удалёнными серверами которые пишут
Код: Выделить всё
% telnet recvmail.piter.net 25
Trying 195.161.113.98...
telnet: Unable to connect to remote host: Connection refused
но рассылают спам, проверка не проходит и спам письма доходят
Полезные скрипты и отладку вам в руки.. Почему? Вы не понимаете что происходит и как работает фильтр.
Спам пройдёт, если время соединения (timeout) выйдет. Если будет будет Connection refused, письмо будет отброшено.