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

Исходное сообщение
"Вопрос по procmail"

Отправлено Eldagar , 25-Ноя-08 13:50 
Приветствую, коллеги!

стоит связка sendmail+fetchmail+procmail

Забирается почта с единого почтового ящика у провайдера, раскладывается по юзерам.

В конфигурационном файле прокмейла правила имеют вид

:0
* ^TObuhg@domain.ru
! buhg
:0
* ^TOelena@domain.ru
! elena

Проблема такая. Если в поле TO входящего письма указано два пользователя - письмо падает только одному, ко второму не попадает.... Причем падает тому кто первый в списке и ДВА раза.... Иначе говоря, как объяснить прокмейлу, что надо досмотреть правила до конца, а не использовать только первое, которое нашел?


Содержание

Сообщения в этом обсуждении
"Вопрос по procmail"
Отправлено Medlar , 25-Ноя-08 14:28 
>Иначе говоря, как объяснить
>прокмейлу, что надо досмотреть правила до конца, а не использовать только
>первое, которое нашел?

:0 с



"Вопрос по procmail"
Отправлено Eldagar , 25-Ноя-08 15:34 
>>Иначе говоря, как объяснить
>>прокмейлу, что надо досмотреть правила до конца, а не использовать только
>>первое, которое нашел?
>
>:0 с

Не поможете еще по одному вопросу?

Проблема такая
Если в поле ТО письма написан только адрес - все отлично, все
сортируется. Но если там есть еще какой-нить текст - правило не
срабатывает (

Пробовал и так
* ^To:.*vladimir@domain.ru
! vladimir

И так

* ^TOvladimir@domain.ru
! vladimir

Где грабли?


"Вопрос по procmail"
Отправлено Medlar , 25-Ноя-08 15:46 
>Но если там есть еще какой-нить текст - правило не
>срабатывает (

Правильно, ведь в таком случае заголовок To: выглядит так:
To: Владимир Ильич Улянов(Ленин)<vladimir@domain.ru>

>* ^To:.*vladimir@domain.ru

А это правило учитывает символы до e-mail, но не учитывает символ > после e-mail

то есть имхо д.б.
* ^To:.*vladimir@domain.ru.*


"Вопрос по procmail"
Отправлено Eldagar , 25-Ноя-08 16:09 
Чем дальше, тем веселее )

За второй ответ спасибо огромное, помогло... Но как только я делаю по первой схеме
то есть добавляю :0 c  -  правила не срабатывают (

:0 c
* ^To:.*vladimir@domain\.ru.*
! vladimir


"Вопрос по procmail"
Отправлено Medlar , 25-Ноя-08 16:18 
сорри, невнимательно прочитала, первый совет не в тему

а почему у вас
TOelena
а не
To: elena


"Вопрос по procmail"
Отправлено Eldagar , 25-Ноя-08 17:01 
man procmailrc
Нашел там такую фразу

       If the regular expression contains `^TO_' it will be substituted by
       `(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope
       |Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)', which should catch
       all destination specifications containing a specific address.

       If the regular expression contains `^TO' it will be substituted by
       `(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope
       |Apparently(-Resent)?)-To):(.*[^a-zA-Z])?)', which should catch all
       destination specifications containing a specific word.

Конструкт

* ^TO_vladimir@domain.ru
! vladimir

Работает замечательно. Но проблема осталась с полем СС или несколькими адресами в поле ТО

Конфиг

:0 c
* ^TO_sveta@domain.ru
! sveta
:0 c
* ^TO_vladimir@domain.ru
! vladimir


Происходит следующее, если верить логу

procmail: [4698] Tue Nov 25 16:47:56 2008
procmail: Match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)sveta@domain.ru"
procmail: Assigning "LASTFOLDER=/usr/sbin/sendmail -oi sveta"
procmail: Match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)vladimir@domain.ru"
procmail: Executing "/usr/sbin/sendmail,-oi,sveta"
procmail: Assigning "LASTFOLDER=/usr/sbin/sendmail -oi vladimir"
procmail: Bypassed locking "/var/mail/test.lock"
procmail: Assigning "LASTFOLDER=/var/mail/test"
procmail: Opening "/var/mail/test"
procmail: Acquiring kernel-lock
procmail: Executing "/usr/sbin/sendmail,-oi,vladimir"
procmail: Notified comsat: "test@1371927:/var/mail/test"
From xxxxxx@mail.ru Tue Nov 25 16:47:56 2008
Subject: =?windows-1251?Q?=F2=E5=F1=F2?=
  Folder: /var/mail/test                           1946
procmail: [4707] Tue Nov 25 16:47:57 2008
procmail: Match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)sveta@domain.ru"
procmail: Assigning "LASTFOLDER=/usr/sbin/sendmail -oi sveta"
procmail: Executing "/usr/sbin/sendmail,-oi,sveta"
procmail: Assigning "LASTFOLDER=/usr/sbin/sendmail -oi vladimir"
procmail: Bypassed locking "/var/mail/test.lock"
procmail: Assigning "LASTFOLDER=/var/mail/test"
procmail: Opening "/var/mail/test"
procmail: Acquiring kernel-lock
procmail: Notified comsat: "test@1373873:/var/mail/test"
From xxxxxx@mail.ru Tue Nov 25 16:47:57 2008
Subject: =?windows-1251?Q?=F2=E5=F1=F2?=
  Folder: /var/mail/test                           1943
procmail: Executing "/usr/sbin/sendmail,-oi,vladimir"

Иначе говоря, прок запускается ДВА раза, и посылает дубль письма обоим пользователям..

Если 0: c не писать - доходит до первого, отправляет и успокаивается за сим (

Да, присланное ему письмо имело вид

To: =?windows-1251?Q?=C2=EB=E0=E4=E8=EC=E8=F0_=C8=EB=FC=E8=F7_=D3=EB=FF=ED=EE?=
        =?windows-1251?Q?=E2?= <vladimir@domain.ru>
CC: sveta@domain.ru


"Вопрос по procmail"
Отправлено Eldagar , 25-Ноя-08 17:07 
опс, пока чистил лог от лишних строк несовпадения, удалил нужную строчку во второй его части

procmail: Match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)vladimir@domain\.ru"
procmail: Executing "/usr/sbin/sendmail,-oi,sveta"
procmail: Assigning "LASTFOLDER=/usr/sbin/sendmail -oi vladimir"

Вообщем иначе говоря одинако отрабатывают обе копии прока (


В мане написано

       c    Generate a carbon copy of this mail.  This  only  makes  sense  on
            delivering  recipes.  The only non-delivering recipe this flag has
            an effect on is on a nesting block, in order to generate a  carbon
            copy  this will clone the running procmail process (lockfiles will
            not be inherited), whereby the clone will proceed as usual and the
            parent will jump across the block.

Так как сделать так, чтобы работало по человечески ? ((((



"Вопрос по procmail"
Отправлено Medlar , 25-Ноя-08 19:30 
все понятно, у меня была приблизительно такая же проблема только по другому поводу,
боюсь, что силами procmail'a ее не решить

тут ведь получается, что такое письмо дублируется до того, как поступит в распоряжение procmaila
при этом заголовок to остается неизменным.

procmail начинает анализировать заголовок первого письма и ес-но спотыкается о первый сработавший MATCH

потом он анализирует второе письмо и та же история

А если вы  добавляете "c" то ес-но получаете 4 копии письма

В вашем случае можно использовать virtusertable
buhg@domain.ru    buhg

если домен локальный и mailertable в противном случае