EXIM, sendmail, postfix, Dovecot и прочие. Решение проблем связанных с работой электронной почты
Модератор: xM
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
buryanov
- ст. сержант
- Сообщения: 311
- Зарегистрирован: 2008-04-29 13:41:48
- Откуда: Харьков
-
Контактная информация:
Непрочитанное сообщение
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!!!!!!!!!!!!!"
В случае с адресатами - есть соответствующие переменные, если делать проверку полностью письма - по возможны совпадения непосредственно в самом теле.
по подстроке dvd я письмо забанил
Дмитрий.
buryanov*ukr.net
icq# 118639660; skype: buryanov
buryanov
-
Хостинг HostFood.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
- Откуда: Харьков
-
Контактная информация:
Непрочитанное сообщение
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
buryanov
-
dikens3
- подполковник
- Сообщения: 4856
- Зарегистрирован: 2006-09-06 16:24:08
- Откуда: Нижний Новгород
-
Контактная информация:
Непрочитанное сообщение
dikens3 » 2009-02-13 16:42:02
Смотри где эта переменная появляется. В системном фильтре она есть. В DATA не знаю.
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
dikens3
-
buryanov
- ст. сержант
- Сообщения: 311
- Зарегистрирован: 2008-04-29 13:41:48
- Откуда: Харьков
-
Контактная информация:
Непрочитанное сообщение
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
buryanov
-
Dr_Web
- рядовой
- Сообщения: 22
- Зарегистрирован: 2009-02-19 4:43:39
Непрочитанное сообщение
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
-
Dr_Web
- рядовой
- Сообщения: 22
- Зарегистрирован: 2009-02-19 4:43:39
Непрочитанное сообщение
Dr_Web » 2009-02-20 1:18:52
Можно ли это сделать не используя system_filter?
Очень нужно, а времени нет совсем

Dr_Web
-
Dr_Web
- рядовой
- Сообщения: 22
- Зарегистрирован: 2009-02-19 4:43:39
Непрочитанное сообщение
Dr_Web » 2009-02-20 4:30:43
Немного переписал, но всеравно не работает
Код: Выделить всё
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
-
Dr_Web
- рядовой
- Сообщения: 22
- Зарегистрирован: 2009-02-19 4:43:39
Непрочитанное сообщение
Dr_Web » 2009-02-20 22:58:06
local_scan() выполняется до или после
acl_check_data?
Поле добавляется именно local_scan'ом и проверка этого поля должна быть после него, может в этом проблема?

Dr_Web
-
Dr_Web
- рядовой
- Сообщения: 22
- Зарегистрирован: 2009-02-19 4:43:39
Непрочитанное сообщение
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
Dr_Web