if + lookup непонятно работает

EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Wombat
рядовой
Сообщения: 13
Зарегистрирован: 2007-09-14 18:16:44

if + lookup непонятно работает

Непрочитанное сообщение Wombat » 2007-09-27 19:17:17

Создал "макрос"

Код: Выделить всё

MYSQL_GET_SPAM_REJECT_THRESHOLD = \
SELECT u.spam_reject_threshold FROM users u INNER JOIN domains d ON u.domain_id=d.domain_id \
WHERE u.user_name='${quote_mysql:$local_part}' AND d.domain_name='${quote_mysql:$domain}' \
AND d.domain_is_enabled=1 AND u.is_smtp_enabled=1 AND u.antispam_is_enabled=1
Сам запрос проверял через БД. Возвращает значение 30.00 (поле float)

Добавляю в ACL:

Код: Выделить всё

# reject messages that scored spam reject threshold
     deny message = Message has scored $spam_score spam points. Rejecting.
             condition = ${if >={$spam_score_int}{${lookup mysql{MYSQL_GET_SPAM_REJECT_THRESHOLD}{$value}{500}}}{true}{false}}
В результате всегда срабатывает сравнение с 500. Письма с spam score 2.9 проходят, с 1002.9 (GTUBE) не проходят. Также пробовал ставить вместо 500 единицу - режет все письма со spam score > 1

Сейчас успешно работает такое правило

Код: Выделить всё

condition = ${if >={$spam_score_int}{500}{true}{false}}
Пробовал установить 50.00 вместо 500. В результате ошибка:

Код: Выделить всё

2007-09-27 11:02:52 1Iavp7-000188-GU H=example.com [xx.xx.xx.xx] I=[xx.xx.xx.xx]:25 F=<mail@examlpe.com> temporarily rejected after DATA: failed to expan
d ACL string "${if >={$spam_score_int}{50.00}{true}{false}}": invalid integer "50.00"
Проблема в запросе? Подскажите плз, как отладить ее?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35045
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: if + lookup непонятно работает

Непрочитанное сообщение Alex Keda » 2007-09-27 23:54:35

ничерта непонял, но насколько я помню документацию exim работает тока с целыми числами.
если надо с нецелыми - сравнивай в мусе и на выход двавай результата - 0/1
Убей их всех! Бог потом рассортирует...

Wombat
рядовой
Сообщения: 13
Зарегистрирован: 2007-09-14 18:16:44

Re: if + lookup непонятно работает

Непрочитанное сообщение Wombat » 2007-10-08 15:52:48

Как оказалось, В ACL DATA недоступны переменные “$domain” и “$local_part”. http://www.lissyara.su/?id=1239#39.11
В случае RCPT (но не MAIL или DATA), “$domain” и “$local_part” установлены из аргументов адреса.
А проверка спамассассина - это разновидность ACL DATA, следовательно, переменные $domain и $local_part недоступны.

Пришлось устанавливать кастомные меременные $acl_m[x]:
http://www.lissyara.su/?id=1239#39.15

Хочу предупредить всех желающих воспользоваться переменными $acl_m[x] (и не до конца понимающих смысл всего написанного в секции ACL), что их желательно устанавливать в секции ACL перед любыми конструкциями "accept". Потому что если выполняется условие, указанное в accept, дальше список ACL обрабатываться не будет и переменные установлены не будут.