Сканирование поля Subject:

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Сканирование поля Subject:

Непрочитанное сообщение buryanov » 2009-02-11 21:50:59

Hi All
Подскажите, как сделать сканирования по полю Subject.
У меня есть база (MySQL) в которой хранятся слова или выражения.
Сделал примерно следующее

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

deny       condition       = ${if eq{${lookup mysql{SELECT 1 \
                      FROM `subject_deny` \
                       WHERE instr('${quote_mysql:!!!!!$variables!!!!!!}', subj) \
                       LIMIT 1}}}{1}{yes}{no}}
      hosts           = !+relay_from_hosts : *
      set acl_m2      = 1
      message         = "!!!!!!!!!!!!!You Ban!!!!!!!!!!!!!"
В случае с адресатами - есть соответствующие переменные, если делать проверку полностью письма - по возможны совпадения непосредственно в самом теле.

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

Subject:lallala dvd lalala
по подстроке dvd я письмо забанил
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Сканирование поля Subject:

Непрочитанное сообщение buryanov » 2009-02-13 16:23:39

Перечитал доку, есть такая переменная $h_Subject.
Прописал в конфиге запрос:

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

${if eq{${lookup mysql{SELECT 1 \
                      FROM `subject_deny` \
                       WHERE instr('${quote_mysql:$h_Subject:}', subj) \
                       LIMIT 1}}}{1}{yes}{no}}
в mysql он приходит

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

 SELECT 1 FROM `subject_deny` WHERE instr('', subj) LIMIT 1
тоесть $h_Subject просто непередаётся в независимости от наличия текста в Subject
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Аватара пользователя
dikens3
подполковник
Сообщения: 4856
Зарегистрирован: 2006-09-06 16:24:08
Откуда: Нижний Новгород
Контактная информация:

Re: Сканирование поля Subject:

Непрочитанное сообщение dikens3 » 2009-02-13 16:42:02

Смотри где эта переменная появляется. В системном фильтре она есть. В DATA не знаю.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.

Аватара пользователя
buryanov
ст. сержант
Сообщения: 311
Зарегистрирован: 2008-04-29 13:41:48
Откуда: Харьков
Контактная информация:

Re: Сканирование поля Subject:

Непрочитанное сообщение buryanov » 2009-02-13 18:00:28

Через system-filter запрос идёт, но если написана тема по русски - получаю следующюю ошибку
Feb 13 16:57:30 asterisk exim[50513]: [50513] 1LXzTu-000D8i-Pg Error in system filter: failed to expand "${lookup mysql{SELECT 1 FROM `subject_deny` WHERE instr('${quote_mysql:$h_Subject:}', subj) LIMIT 1}}" in filter file: lookup of "SELECT 1 FROM `subject_deny` WHERE instr('\301\320\336\310\311', subj) LIMIT 1" gave DEFER: MYSQL: query failed: Illegal mix of collations (latin1_swedish_ci,COERCIBLE) and (koi8r_general_ci,IMPLICIT) for operation 'locate'\n
хотя в mysql приходит нормально
2829 Connect exim_db@localhost on exim_db
2829 Query SELECT 1 FROM `subject_deny` WHERE instr('вап', subj) LIMIT 1
2829 Quit
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov

Dr_Web
рядовой
Сообщения: 22
Зарегистрирован: 2009-02-19 4:43:39

Re: Сканирование поля Subject:

Непрочитанное сообщение Dr_Web » 2009-02-19 5:00:19

У меня примерно такой же вопрос :) Нужно прочитать поле X-Spam-Flag, и если оно X-Spam-Flag: YES выдать deny. Делаю это в acl_check_data при помощи regex:

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

acl_check_data:
        deny message = "Spam found"
                logwrite = "SPAM ($regex_match_string)"
                regex = X-Spam-Flag:: YES
accept
Вроде определяет строку, но письмо пропускает.
Возможно вы по считаете мой вопрос глупым, но я недавно связался exim'ом и вдоволь уже накурился манов и документации, мозг пухнет... Хотя вроде ничего сложного.

Dr_Web
рядовой
Сообщения: 22
Зарегистрирован: 2009-02-19 4:43:39

Re: Сканирование поля Subject:

Непрочитанное сообщение Dr_Web » 2009-02-20 1:18:52

Можно ли это сделать не используя system_filter?
Очень нужно, а времени нет совсем :(

Dr_Web
рядовой
Сообщения: 22
Зарегистрирован: 2009-02-19 4:43:39

Re: Сканирование поля Subject:

Непрочитанное сообщение Dr_Web » 2009-02-20 4:30:43

Немного переписал, но всеравно не работает :st:

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

acl_check_data:
        deny  message = This message is spam ($regex_match_string)
                 regex = ^X.Spam.Flag.\sYES
                 logwrite = SPAM ($regex_match_string)
accept
Письмо с этим заголовком пропущено:

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

...
MIME-Version: 1.0
Content-Type: text/plain;
  charset=koi8-r
Content-Transfer-Encoding: 8bit
X-Spam-Ystatus: hits=70.50
X-Spam-Flag: YES
X-Spam-Yversion: Spamooborona-3.0
Subject: [SPAM 70.50]  =?koi8-r?B?59LV0NDP19XIwSCWINPNz9TSxdTYIM/C0drB1MXM2M7P?=
...

Dr_Web
рядовой
Сообщения: 22
Зарегистрирован: 2009-02-19 4:43:39

Re: Сканирование поля Subject:

Непрочитанное сообщение Dr_Web » 2009-02-20 22:58:06

local_scan() выполняется до или после acl_check_data?
Поле добавляется именно local_scan'ом и проверка этого поля должна быть после него, может в этом проблема? :(

Dr_Web
рядовой
Сообщения: 22
Зарегистрирован: 2009-02-19 4:43:39

Re: Сканирование поля Subject:

Непрочитанное сообщение Dr_Web » 2009-02-21 4:32:03

Как оказалось local_scan после все ACL, пришлось использовать системный фильтр

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

# Exim filter
if $header_X-Spam-Flag: is "YES"
        then
                fail text "Spam is not wanted here"
        endif
Все заработало, спасибо за помощь :)

Только вылезла еще проблема:

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

2009-02-21 04:15:29 1LagSn-000Kzq-1S server did not confirm, answ=
2009-02-21 04:15:29 1LagSn-000Kzq-1S read() error 54, len=-1
2009-02-21 04:15:29 1LagSn-000Kzq-1S sp-exim: error 53 sending envelope data
2009-02-21 04:15:29 1LagSn-000Kzq-1S F=izeld@nm.ru H=mail3.ks.pochta.ru [82.204.219.182] I=[82.146.41.246]:25 P=esmtp temporarily rejected by local_scan(): Temporary local problem