Exim: match-условие в роутере.

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

Модератор: xM

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-06-30 18:25:56

На сервер с неких других серваков приходят письма уже проверенные на спам.
Их отличительная черта: надпись SPAM и очки в заголовке.

Сотворил роутер вот такой:

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

subj_spam:
  driver = accept
  domains = +local_domains
  condition = "${if match{$h_Subject}{\\**[Ss][Pp][Aa][Mm]\\*\\(\\d*\\.\\d*\\)}{yes}{no}}"
  transport = spam_delivery
  no_verify
  no_expn
  no_more
То есть проверяется что в хеадере начало вида **** SPAM*(99.9) и отправляет его на правильный транспорт.

Ну это по задумке. По факту вижу в логах только:

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

2009-06-30 19:22:14 1MLf9x-000IOw-Oa failed to expand condition "${if match{$header_subject}{\**}{yes}{no}}" for subj_spam router: missing } at end of string - could be header name not terminated by colon
Ткните носом что я делаю не так.

Хостинговая компания 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/
Выделенные сервера, Россия, Москва, от 2460 рублей (8 CPU, 8Gb RAM, 2x500Gb HDD, RAID 3ware 9750):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

qw
проходил мимо

Re: Exim: match-условие в роутере.

Непрочитанное сообщение qw » 2009-07-01 8:08:04

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

\\**[Ss][Pp][Aa][Mm]\\*\\(\\d*\\.\\d*\\)}{yes}{no}
возможно не совсем верно, но
экранируешь *, вторая звездочка не экранирована, \d соответствует любой цифре, \d{2} две цифры, \d{1} одна цифра, \. соответствует точке
вообще чтобы не ставить столько слэшей, используется \N ... \N
наверное так, хотя это может быть не правильно:

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

\N\*\*[Ss][Pp][Aa][Mm]\*\(\d\.\d\)\N

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-07-01 9:27:31

Сам регуляр верный. Я его pcretest проверил предварительно. Косяк в чём-то другом, как я понимаю.

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-07-01 11:37:07

Поменял выражение на такое:

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

${if match{$h_Subject}{\N\**[Ss][Pp][Aa][Mm]\*(\d*\.\d*)\N}{yes}{no}}
Не в этом дело.

Тут: любое количество звёздочек, потом надпись SPAM в любом регистре, потом одна звёздочка и некое количество цифр разделённых точкой в скобочках. Так что регуляр вроде верный.

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-07-01 16:06:00

Может есть другой способ письмо со словом SPAM в заголовке отправлять на определённый транспорт?

atrium
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-08-19 15:35:47

Re: Exim: match-условие в роутере.

Непрочитанное сообщение atrium » 2009-07-01 16:46:23

missing } at end of string

Не хватает }

Ваше регулярное выражение

re> /\*\*[Ss][Pp][Aa][Mm]\*\(\d\.\d\)/
data> **SPAM*(67.7)
No match
data> ***SPAM*(99.9)
No match
data>

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-07-01 17:36:40

atrium писал(а):missing } at end of string
Не хватает }
Это я прочитал.
Но, если присмотреться, то видно что все открывающие { у меня закрыты.
atrium писал(а): Ваше регулярное выражение
re> /\*\*[Ss][Pp][Aa][Mm]\*\(\d\.\d\)/
Не правда. Моё:

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

 re> /\**[Ss][Pp][Aa][Mm]\*\(\d*\.\d*\)/
data> ***SPAM*(99.9)
 0: ***SPAM*(99.9)
data> **SPAM*(67.7)
 0: **SPAM*(67.7)

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-07-14 12:27:35

Может есть какой-то другой способ сортировать сервером сообщения по слову в поле "тема"?

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-08-05 12:24:17

Неужели никто ничего не подскажет? Или вопрос слишком простой?

atrium
мл. сержант
Сообщения: 88
Зарегистрирован: 2008-08-19 15:35:47

Re: Exim: match-условие в роутере.

Непрочитанное сообщение atrium » 2009-08-05 12:32:12

Ещё положение роутера играет роль, посмотрите, может у Вас до этого роутера другой стоит, который занимается доставкой

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim: match-условие в роутере.

Непрочитанное сообщение CrazyPilot » 2009-08-06 10:05:47

DJ Kill писал(а):

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

missing } at end of string - could be header name not terminated by colon
Хм, написано же.

Если я правильно понял - исправьте

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

$h_Subject
на

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

$h_Subject:

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-08-06 10:56:54

Вот оно спасение! Спасибо! Двоеточие! :)

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-08-06 13:56:19

Вот бы ещё научить как-то чтобы IMAP сразу помечал эти письма как прочитанные (ставил флаг Seen).

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim: match-условие в роутере.

Непрочитанное сообщение CrazyPilot » 2009-08-06 14:12:08

Если у вас dovecot - смотрите доку на его сайте по поводу sieve. он как раз умеет менять флаги писем. Это плагин к lda с вкусными возможностями.

А вообще, насколько я знаю, у довекота флаги указаны в названии файла,

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

[root@flanker ~]# ls -l /var/mail/root\@domain.ru/.Junk/cur/
-rw-------  1 mailnull  mail   6326 Aug  6 10:29 1249540191.M517558P58563.flanker.domain.ru,W=6468:2,S  # Прочитанное письмо
-rw-------  1 mailnull  mail   1720 Aug  6 11:01 1249542109.M826214P65476.flanker.domain.ru,W=1769:2,   # Непрочтённое письмо
Но я не знаю, является ли это достаточным условием. Как вариант написать скрипт, которые переименовывает файлы и запихать его в крон. Но это изврат, я бы курил доку по sieve.

DJ Kill
мл. сержант
Сообщения: 83
Зарегистрирован: 2007-12-04 16:51:34

Re: Exim: match-условие в роутере.

Непрочитанное сообщение DJ Kill » 2009-08-06 14:32:25

У меня exim+courier-imap

Флаги прописываются действительно в названии файла в соответствии с RFC.

Прописывать это внешним скриптом можно, но сама идея мне не нравится хотя бы тем, что скрипт будет срабатывать по времени и письмо некоторое время будет свертиться как непрочитанное. Хочется сделать это почтовой системой.

CrazyPilot
ст. сержант
Сообщения: 321
Зарегистрирован: 2008-08-14 9:17:58
Откуда: Санкт-Петербург
Контактная информация:

Re: Exim: match-условие в роутере.

Непрочитанное сообщение CrazyPilot » 2009-08-06 14:46:30

Ну, sorry, courier-imap ни разу в живую не видел.