[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