[linux] Re: Carbon copy procmail

Kees Theunissen theuniss op rijnh.nl
Do Mrt 10 21:41:07 CET 2005


On Thu, 10 Mar 2005, Richard de Vries wrote:

>Hoi,
>
>Ik draai al een tijdje procmail maar sinds kort moet ik ook CC kunnen
>filteren.
>De methode die nu gebruikt wordt is met
>
>:0:
>* ^FROM_emailadres
>usermailbox

Hmm, deze ^FROM_ staat niet in mijn procmailrc manpage.
Bedoel je soms ^TO_ ?
De manpage:
       If the regular expression contains `^TO_' it will be  sub-
       stituted 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  sub-
       stituted by `(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-
       Envelope|Apparently(-Resent)?)-To):(.*[^a-zA-Z])?)', which
       should catch all destination specifications containing a
       specific word.

De expansie van die ^TO_ matched dus _ook_ met een CC header.

>Als procmail nu een adres tegenkomt plaatst hij de mail in de box en
>leest de filterlijst niet verder af. Als er dus nog een CC in de mail
>staat wordt hier niets mee gedaan.

Zodra procmail een bericht heeft afgeleverd (of geforward, of
door een pipe gestuurd, of ...) dan beschouwd hij dat bericht als
klaar. Je kan met een "c" vlag (continue) aangeven dat verdere
recipes ook nog moeten worden verwerkt voor dit bericht.

Iets als

 :0c:
 * ^TO_emailadres
 usermailbox

 :0c:
 * ^TO_anderadres
 anderemailbox

 ...

 :0:
 * ^TO_laatsteadres
 laatstemailbox


Toch is dit nog behoorlijk lastig om goed op te zetten.
Want:
-- Mail van mailinglists zullen vaak het listadres in de To:
   header hebben, niet het adres van jouw user.
-- Mail die je via een Bcc: krijgt toegezonden zul je zo niet
   uitfilteren.
-- Met bovenstaand voorbeeld blijf je na het laatste recipe
   alsnog zitten met alle mail die niet door het laatste recipe
   gematched werd. Je hebt immers in de voorgaande recipes gezegd
   dat (met de c vlag) dat gewoon met dit mailtje moet worden
   doorgegaan. En alle mail die je na het laatste recipe nog over
   hebt wordt geplaatst in de system mailbox van de user die het
   script runt.

Je zou voor dit laatste probleem een dummy recipe kunnen toevoegen
die het mailtje alsnog weg mikt. Om te voorkomen dat je dan ook mail
weg mikt die nog niet gematched was in de voorgaande recipes kan je
met geneste recipes werken.

  :0
  * ^TO_(emailadres|anderadres|...|laatsteadres)
  {
    :0c:
    * ^TO_emailadres
    usermailbox

    :0c:
    * ^TO_anderadres
    anderemailbox

    ...

    :0:
    * ^TO_laatsteadres
    laatstemailbox

    :0
    /dev/null
  }


>
>Er moeten naar mijn idee dus eigenlijk 2 dingen worden gedaan:
>- de hele filterlijst doorlopen ?
>- er moet een regel als * ^CC_emailadres in staan ?
>
>Kan het nergens vinden. Heb in een grijs verleden wel iets gelezen over
>het stoppen van het filteren als er iets wordt gematched maar weet niet
>meer waar.


Als je dit wilt gebruiken om mail voor verschillende gebruikers
uit te filteren (echt _verschillende_ gebruikers, niet verschillende
emailadressen voor dezelfde gebruiker uitsplitsen in verschillende
mailboxen) dan is procmail niet het meest handige tooltje daarvoor.

Het eerst bij elkaar vegen van verschillende adressen in één mailbox
en later weer uitsplitsen is zonder meer een onzalig idee. Lees voor
de instinkers de manpage van fetchmail, en dan met name het deel
over "multidrop" mailboxen. Als je echt mail voor verschillende
gebruikers moet uitsplitsen, en als je die mail met het POP
protocol bij je provider moet ophalen, overweeg dan of de multidrop
features van fetchmail niet beter geschikt zijn voor deze job.

Groeten,

Kees.

-- 
Kees Theunissen
F.O.M.-Instituut voor Plasmafysica "Rijnhuizen", Nieuwegein
E-mail: theuniss op rijnh.nl,     Tel: 030-6096724,     Fax: 030-6031204




More information about the Linux mailing list