Помогите пожалуйста с конструкцией типа:
deny message = Stop Spam!
regex = lsearch;/usr/local/exim/test-word
Мне необходимо, чтобы проверялось письмо на наличие в нем одного из выражений из файла /usr/local/exim/test-wordЭтот файл содержит в себе данные в разных кодировках в формате:
аренд*
заказ обед*
грузоперев*
заказ таксиПрошу вас не отсылать меня читать мануал, а действительно помочь. Если я этого завтра не сделаю, меня уволят :'(
У меня есть идея, что все должно выглядеть так:
deny message = Stop Spam!
condition = ${if match{$message_body}{lsearch;/usr/local/exim/test-word}{yes}{no}}
Но почему не работает?
>У меня есть идея, что все должно выглядеть так:
>deny message = Stop Spam!
> condition = ${if match{$message_body}{lsearch;/usr/local/exim/test-word}{yes}{no}}
>Но почему не работает?вы пытаетесь сравнить список со списком... к сожалению данный механизм внутри exim не реализован. у вас есть 2 варианта:
1. содержит ли $message_body определённое значение (не список!). вам понадобится столько вложенных if or {} сколько значений. (не забудьте указывать кодировку поиска)
2. exim позволяет вcтраивать perl процедуры в acl. Вы лишь нужно передать message_body и ваш список в perl-функцию, которая по сути своей будет обычным поиском. hint: если perl-функция возвращает numeric то в if используейте eqi
Теперь запрос выглядит так:
deny message = Your letter contain many spam words! If this wrong, send letter to spamtrap@pac.ru!
logwrite = This message contains spam-word ($message_body)
condition = ${lookup{$message_body}lsearch{/usr/local/etc/exim/blacklist/spam-word-cp1251}{0}{1}}А файл /usr/local/etc/exim/blacklist/spam-word-cp1251 собрал из двух
писем, посланных с mail.ru и от себя. Теперь он выглядит так:
*=E3=F0=EE=E2=FB* *=E2=F2=EE=EC=E0=F2=EE*
*=EE=EC=E5=F9=E5=ED=E8=FF =E2 =E0=F0=E5=ED=E4=F3
*=EE=EC=E5=F9=E5=ED=E8=FF =ED=E0 =EF=F0=EE=E4=E0=E6=F3
недвижимость
ипотекаНо теперь все письма режутся.
Вот кусок лога:
This message contains spam-word (=DF =EB=FE=E1=EB=FE =F2=E5=E1=FF, =EA=EE=F2=E5=ED=EE=EA. )
rejected after DATA: Your letter contain many spam words! If this wrong, send letter to spamtrap@pac.ru!А вот если поменять местами {1} и {0}, то ничего не режется!
>Теперь запрос выглядит так:
>deny message = Your letter contain many spam words! If this wrong,
>send letter to spamtrap@pac.ru!
>logwrite = This message contains spam-word ($message_body)
>condition = ${lookup{$message_body}lsearch{/usr/local/etc/exim/blacklist/spam-word-cp1251}{0}{1}}
>
>А файл /usr/local/etc/exim/blacklist/spam-word-cp1251 собрал из двух
>писем, посланных с mail.ru и от себя. Теперь он выглядит так:
>*=E3=F0=EE=E2=FB* *=E2=F2=EE=EC=E0=F2=EE*
>*=EE=EC=E5=F9=E5=ED=E8=FF =E2 =E0=F0=E5=ED=E4=F3
>*=EE=EC=E5=F9=E5=ED=E8=FF =ED=E0 =EF=F0=EE=E4=E0=E6=F3
>недвижимость
>ипотека
>
>Но теперь все письма режутся.
>Вот кусок лога:
>This message contains spam-word (=DF =EB=FE=E1=EB=FE =F2=E5=E1=FF, =EA=EE=F2=E5=ED=EE=EA. )
>rejected after DATA: Your letter contain many spam words! If this wrong,
>send letter to spamtrap@pac.ru!
>
>А вот если поменять местами {1} и {0}, то ничего не режется!
>
я вам ответил выше.. если вы будете использовать exim -bd -d+all то увидите в деталях как прорабатывется ваше условие. поведение exim от вашего условия вполне очевидно, сравнение изначально неверно.
>>А вот если поменять местами {1} и {0}, то ничего не режется!
бедненький, вот не прошло и года как пришло ваше избавление
оказывается надо использовать nwildsearch
читайте чаще нашу рассылку exim
Доброго времени суток!!!Вот возникла и у меня такая проблема. Прочитав Ваши ответы, порылся, поискал и нашел ответ...
>deny message = STOP!
>condition = ${if or { \
>{match {${lc:$message_body}}{.*ВЫРАЖЕНИЕ.*}} \
>{match {${lc:$message_body}}{.*ВЫРАЖЕНИЕ.*}} \
>{match {${lc:$message_body}}{.*ВЫРАЖЕНИЕ.*}} \
>}{1}{0}}Подскажите плз как указать кодировку
Заранее спасибо