URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 61886
[ Назад ]

Исходное сообщение
"regex + lsearch в Exim"

Отправлено SubGun , 17-Ноя-05 18:02 
Помогите пожалуйста с конструкцией типа:
deny  message = Stop Spam!
  regex = lsearch;/usr/local/exim/test-word
Мне необходимо, чтобы проверялось письмо на наличие в нем одного из выражений из файла /usr/local/exim/test-word

Этот файл содержит в себе данные в разных кодировках в формате:
аренд*
заказ обед*
грузоперев*
заказ такси

Прошу вас не отсылать меня читать мануал, а действительно помочь. Если я этого завтра не сделаю, меня уволят :'(


Содержание

Сообщения в этом обсуждении
"regex + lsearch в Exim"
Отправлено SubGun , 17-Ноя-05 18:20 
У меня есть идея, что все должно выглядеть так:
deny  message = Stop Spam!
  condition = ${if match{$message_body}{lsearch;/usr/local/exim/test-word}{yes}{no}}
Но почему не работает?

"regex + lsearch в Exim"
Отправлено bass , 18-Ноя-05 13:18 
>У меня есть идея, что все должно выглядеть так:
>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


"regex + lsearch в Exim"
Отправлено SubGun , 18-Ноя-05 13:22 
Теперь запрос выглядит так:
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}, то ничего не режется!


"regex + lsearch в Exim"
Отправлено bass , 18-Ноя-05 13:27 
>Теперь запрос выглядит так:
>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 от вашего условия вполне очевидно, сравнение изначально неверно.


"regex + lsearch в Exim"
Отправлено sysadmin.org , 13-Ноя-06 01:46 
>>А вот если поменять местами {1} и {0}, то ничего не режется!
бедненький, вот не прошло и года как пришло ваше избавление
оказывается надо использовать nwildsearch
читайте чаще нашу рассылку exim

"regex + lsearch в Exim"
Отправлено viktor , 19-Окт-11 22:34 
Доброго времени суток!!!

Вот возникла и у меня такая проблема. Прочитав Ваши ответы, порылся, поискал и нашел ответ...

>deny message = STOP!
>condition = ${if or { \
>{match {${lc:$message_body}}{.*ВЫРАЖЕНИЕ.*}} \
>{match {${lc:$message_body}}{.*ВЫРАЖЕНИЕ.*}} \
>{match {${lc:$message_body}}{.*ВЫРАЖЕНИЕ.*}} \
>}{1}{0}}

Подскажите плз как указать кодировку

Заранее спасибо