Страница 1 из 1
Exim: match-условие в роутере.
Добавлено: 2009-06-30 18:25:56
DJ Kill
На сервер с неких других серваков приходят письма уже проверенные на спам.
Их отличительная черта: надпись 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
Ткните носом что я делаю не так.
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-01 8:08:04
qw
Код: Выделить всё
\\**[Ss][Pp][Aa][Mm]\\*\\(\\d*\\.\\d*\\)}{yes}{no}
возможно не совсем верно, но
экранируешь *, вторая звездочка не экранирована, \d соответствует любой цифре, \d{2} две цифры, \d{1} одна цифра, \. соответствует точке
вообще чтобы не ставить столько слэшей, используется \N ... \N
наверное так, хотя это может быть не правильно:
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-01 9:27:31
DJ Kill
Сам регуляр верный. Я его pcretest проверил предварительно. Косяк в чём-то другом, как я понимаю.
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-01 11:37:07
DJ Kill
Поменял выражение на такое:
Код: Выделить всё
${if match{$h_Subject}{\N\**[Ss][Pp][Aa][Mm]\*(\d*\.\d*)\N}{yes}{no}}
Не в этом дело.
Тут: любое количество звёздочек, потом надпись SPAM в любом регистре, потом одна звёздочка и некое количество цифр разделённых точкой в скобочках. Так что регуляр вроде верный.
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-01 16:06:00
DJ Kill
Может есть другой способ письмо со словом SPAM в заголовке отправлять на определённый транспорт?
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-01 16:46:23
atrium
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>
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-01 17:36:40
DJ Kill
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)
Re: Exim: match-условие в роутере.
Добавлено: 2009-07-14 12:27:35
DJ Kill
Может есть какой-то другой способ сортировать сервером сообщения по слову в поле "тема"?
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-05 12:24:17
DJ Kill
Неужели никто ничего не подскажет? Или вопрос слишком простой?
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-05 12:32:12
atrium
Ещё положение роутера играет роль, посмотрите, может у Вас до этого роутера другой стоит, который занимается доставкой
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-06 10:05:47
CrazyPilot
DJ Kill писал(а):
Код: Выделить всё
missing } at end of string - could be header name not terminated by colon
Хм, написано же.
Если я правильно понял - исправьте
на
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-06 10:56:54
DJ Kill
Вот оно спасение! Спасибо! Двоеточие!

Re: Exim: match-условие в роутере.
Добавлено: 2009-08-06 13:56:19
DJ Kill
Вот бы ещё научить как-то чтобы IMAP сразу помечал эти письма как прочитанные (ставил флаг Seen).
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-06 14:12:08
CrazyPilot
Если у вас 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.
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-06 14:32:25
DJ Kill
У меня exim+courier-imap
Флаги прописываются действительно в названии файла в соответствии с RFC.
Прописывать это внешним скриптом можно, но сама идея мне не нравится хотя бы тем, что скрипт будет срабатывать по времени и письмо некоторое время будет свертиться как непрочитанное. Хочется сделать это почтовой системой.
Re: Exim: match-условие в роутере.
Добавлено: 2009-08-06 14:46:30
CrazyPilot
Ну, sorry, courier-imap ни разу в живую не видел.