Страница 1 из 1

Совместить два кондишена

Добавлено: 2010-07-23 16:21:47
storm
Копирую почту которая набрала определенное число спам очков. Однако в ящик падают письма для тех юзеров которых уже давно нет. Необходимо также проверять наличие самого юзера.

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

${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}}}{yes}{no}}

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

${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}
Пробовал совместить, но к сожалению вылазит паниклог :(

Re: Совместить два кондишена

Добавлено: 2010-07-23 18:12:33
Alex Keda
показывайте, как пытаетесь

Re: Совместить два кондишена

Добавлено: 2010-07-24 10:14:32
storm
Alex Keda писал(а):показывайте, как пытаетесь

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

message_copy_mini_spam:
    driver = redirect
    domains = +local_domains
    condition     = ${if and {{{>{$acl_m0}{0}}{<{$acl_m0}{60}}} \
                {${lookup mysql{SELECT username from mailbox WHERE \
                username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}{yes}{no}}
    data = test@example.com
    unseen
В логах

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

2010-07-24 10:00:52 [21954] failed to expand condition "${if and {{{>{$acl_m0}{0}}{<{$acl_m0}{60}}} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}{yes}{no}}" for message_copy_mini_spam router: condition name expected, but found "{>{$acl_m0}{0}}{" inside "and{...}" condition

Re: Совместить два кондишена

Добавлено: 2010-07-24 11:42:04
storm
Еще пробовал вот так

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

${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} \
                {lookup mysql{SELECT username from mailbox WHERE \
                 username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
В логах

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

2010-07-24 11:06:45 [22890] failed to expand condition "${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} {lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}" for message_copy_mini_spam router: unknown condition "lookup" inside "and{...}" condition

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

${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} \
                ${lookup mysql{SELECT username from mailbox WHERE \
                username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
В логах

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

2010-07-24 11:10:43 [23010] failed to expand condition "${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}} ${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}" for message_copy_mini_spam router: each subcondition inside an "and{...}" condition must be in its own {}

Re: Совместить два кондишена

Добавлено: 2010-07-24 21:51:46
Alex Keda
чё-то у вас странное понаписано.
попробуйте простые условия скомбинировать, а потом лукап туда воткнуть
он, ксати,будет как mysql заучать, помоему.
так что вам ещё и в доку, за примерами.

Re: Совместить два кондишена

Добавлено: 2010-07-25 22:06:57
storm
Alex Keda писал(а):чё-то у вас странное понаписано.
попробуйте простые условия скомбинировать, а потом лукап туда воткнуть
он, ксати,будет как mysql заучать, помоему.
так что вам ещё и в доку, за примерами.
Так простое двойное условие работает, помог составить dikens3 - http://forum.lissyara.su/viewtopic.php?f=20&t=26980
И лукап работает. А вот совместить в одном кондишене двойное условие и лукап у меня, к сожалению, не получается.

Re: Совместить два кондишена

Добавлено: 2010-07-26 6:54:15
Urgor
А если так переписать:

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

message_copy_mini_spam:
    driver = redirect
    domains = +local_domains
    condition     = ${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}}}{yes}{no}}
    condition     = ${if eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
    data = test@example.com
    unseen

Re: Совместить два кондишена

Добавлено: 2010-07-26 9:09:12
storm
Urgor писал(а):А если так переписать:

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

message_copy_mini_spam:
    driver = redirect
    domains = +local_domains
    condition     = ${if and {{>{$acl_m0}{0}}{<{$acl_m0}{60}}}{yes}{no}}
    condition     = ${if eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}{yes}{no}}
    data = test@example.com
    unseen
Дело в том, что в роутерах два кондишена задавать нельзя.

Re: Совместить два кондишена

Добавлено: 2010-07-26 9:33:22
blade_007
Попробуйте так. Заодно уточните в доке 11.7 и 11.8

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

${if and {\
{>{$acl_m0}{0}} \
{<{$acl_m0}{60}} \
{$eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}\
}\
}

Re: Совместить два кондишена

Добавлено: 2010-07-26 11:12:34
storm
blade_007 писал(а):Попробуйте так.

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

${if and {\
{>{$acl_m0}{0}} \
{<{$acl_m0}{60}} \
{$eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}\
}\
}

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

2010-07-26 11:08:59 [21998] failed to expand condition "${if and {{>{$acl_m0}{0}} {<{$acl_m0}{60}} {$eq{} {${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}}}" for message_copy_mini_spam router: condition name expected, but found "$eq{} {${lookup " inside "and{...}" condition
Заодно уточните в доке 11.7 и 11.8
А что там уточнять?
По моему написано вполне кратко и лаконично
and {{<cond1>}{<cond2>}...}
Подусловия оцениваются слева направо. Условие исинно, если все подусловия верны. Если тут несколько подусловий “match”, то значения числовых переменных берутся от последнего. Если найдено ложное подусловие, то остальные парсятся, но не оцениваются.

Re: Совместить два кондишена

Добавлено: 2010-07-26 14:51:36
blade_007
вот рабочий вариант

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

${if and{{>{20}{0}}{eq{1}{${lookup mysql{SELECT 1 from users WHERE id='jack'}}}}}}
по крайней мере exim -be не жалуется

Re: Совместить два кондишена

Добавлено: 2010-08-09 14:17:25
storm
Вот так у меня заработало:

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

condition     = ${if and {\
                    {eq{$acl_m3}{0}}\
                    {>{$acl_m0}{0}}\
                    {<{$acl_m0}{60}}\
                    {!eq{}{${lookup mysql{SELECT username from mailbox WHERE username='${quote_mysql:$local_part@$domain}' AND active='1'}}}}\
                }}