Приветствую, коллеги!стоит связка sendmail+fetchmail+procmail
Забирается почта с единого почтового ящика у провайдера, раскладывается по юзерам.
В конфигурационном файле прокмейла правила имеют вид
:0
* ^TObuhg@domain.ru
! buhg
:0
* ^TOelena@domain.ru
! elenaПроблема такая. Если в поле TO входящего письма указано два пользователя - письмо падает только одному, ко второму не попадает.... Причем падает тому кто первый в списке и ДВА раза.... Иначе говоря, как объяснить прокмейлу, что надо досмотреть правила до конца, а не использовать только первое, которое нашел?
>Иначе говоря, как объяснить
>прокмейлу, что надо досмотреть правила до конца, а не использовать только
>первое, которое нашел?:0 с
>>Иначе говоря, как объяснить
>>прокмейлу, что надо досмотреть правила до конца, а не использовать только
>>первое, которое нашел?
>
>:0 сНе поможете еще по одному вопросу?
Проблема такая
Если в поле ТО письма написан только адрес - все отлично, все
сортируется. Но если там есть еще какой-нить текст - правило не
срабатывает (Пробовал и так
* ^To:.*vladimir@domain.ru
! vladimirИ так
* ^TOvladimir@domain.ru
! vladimirГде грабли?
>Но если там есть еще какой-нить текст - правило не
>срабатывает (Правильно, ведь в таком случае заголовок To: выглядит так:
To: Владимир Ильич Улянов(Ленин)<vladimir@domain.ru>>* ^To:.*vladimir@domain.ru
А это правило учитывает символы до e-mail, но не учитывает символ > после e-mail
то есть имхо д.б.
* ^To:.*vladimir@domain.ru.*
Чем дальше, тем веселее )За второй ответ спасибо огромное, помогло... Но как только я делаю по первой схеме
то есть добавляю :0 c - правила не срабатывают (:0 c
* ^To:.*vladimir@domain\.ru.*
! vladimir
сорри, невнимательно прочитала, первый совет не в темуа почему у вас
TOelena
а не
To: elena
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: 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'a ее не решитьтут ведь получается, что такое письмо дублируется до того, как поступит в распоряжение procmaila
при этом заголовок to остается неизменным.procmail начинает анализировать заголовок первого письма и ес-но спотыкается о первый сработавший MATCH
потом он анализирует второе письмо и та же история
А если вы добавляете "c" то ес-но получаете 4 копии письма
В вашем случае можно использовать virtusertable
buhg@domain.ru buhgесли домен локальный и mailertable в противном случае