[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Procmail Frage



Moin,

* David Haller wrote (2007-01-10 05:49):
>Am Die, 09 Jan 2007, Thorsten Haude schrieb:
>>* Jochen Schulz wrote (2007-01-09 20:47):
>[procmail]
>>>BTW, welche Alternative empfiehlst Du denn?
>>
>>Ich benutze Maildrop, das kann mehr und hat lesbare Syntax. Es ist
>>angeblich ein wenig langsamer, das interessiert mich aber erst, wenn
>>ich schneller Mails bekomme als Maildrop sie wegsortieren kann.
>[..]
>>Ein einfaches Beispiel: Ich will alle reinen HTML-Mails in den
>>Spamordner packen, außer solchen, die von Web.de kommen:
>>if (/^Content-Type:[:space:]*text\/html/ && ! /From:.*web.de/)
>                    ^^^^^^^^^ Bist du sicher, daß das so korrekt ist?

Ich bin sicher, daß das so in meinem Filter steht und daß HTML-Mails
aussortiert werden. Ist aber wie gesagt historisch, neue Versionen von
Maildrop sprechen PCRE.


>Ein einfaches Beispiel (procmail):
>
>:0
>* ^Content-Type:[[:space:]]*text\/html
>* !^From:.*web.de
>spambox
>
>Kann es sein, daß du nie 'man procmailex' gelesen hast?

Mein Beispiel war nicht so gewählt, daß es von Procmail nicht erfüllt
werden kann, sondern als Beispiel dafür, wie einfach die Sprache zu
lesen ist. Ich habe Procmail ein oder zwei Jahre benutzt, als ich noch
nicht wußte, daß es Alternativen gibt. (Wenn ich mich recht erinnere
war CrossSecretary noch schlimmer.)

Aber bitte, hier noch ein Beispiel, bitte übersetze das doch mal nach
Procmail (auch fast identisch so im Einsatz, es fehlt nur das
Aussortieren von falschen Unsubscribes):
- - - Schnipp - - -
gdbmopen("/home/yooden/.mutt/lists.db")

foreach /^(To|Cc): .*/
{
    foreach (getaddr($MATCH)) =~ /.+/
    {
        listbox = gdbmfetch(tolower($MATCH))
        if ($listbox ne "")
        {
            to $MAILDIR/ML/$listbox
        }
    }
}

gdbmclose
- - - Schnapp - - -


>:0
>* BEDINGUNG
>{
>    ...
>}
>
>Man lese ':0' einfach als 'if'. Und '*' als "AND" ;)

1. Mir fällt nichts Neues mehr dazu ein, daß hier einerseits eine so
   offensichtlich abwegige Sprache verwendet wird (das muß man sich
   mal auf der Zunge zergehen lassen: "Man lese ':0' einfach als
   'if'."), andererseits diese aber als beste Erfindung seit Brot in
   Scheiben verteidigt wird.
   Ich programmiere seit Jahren mit viel Spaß in C, würde aber niemals
   auf die Idee kommen, C als einfache Sprache zu bezeichnen. Im
   Gegenteil, Anfänger sollten C lernen, damit sie das Schlimmste
   hinter sich haben.
2. Klar, und es liegt ja auf der Hand, daß ein if mit einem
   Doppelpunkt auf ein lokales Lockfile hinweist.

   if: (condition)
   {
       # Mach was
   }

Ist das jetzt wichtig? Kann man das Beispiel trotzdem auch in Procmail
verstehen? Klar, aber darüberhinaus ist es eben eine gänzlich eigene
Denkweise, die einem nirgendwo sonst begegnet. Hier oder in der
SuSE-Liste hatte mal jemand eine Regel, die etwa so aussah:
:1
* cond1
mailbox

Einige wunderten sich darüber, wie man auf die (in ihren Augen
abwegige) Idee kommen kann, dort eine 1 hinzusetzen. Ich konnte das
halbwegs nachvollziehen: Wenn man ein Problem hat, versucht man halt
ein paar Sachen aus, und dabei eine Ziffer zu erhöhen, liegt nahe (es
könnte ja ein Wahrheitswert sein!). Was der Nutzer nicht bedacht hat
ist, daß die 0 bei Procmail keine Ziffer ist, sondern eben die Hälfte
von etwas, was beinahe (aber nicht ganz) völlig anders als ein if
funktioniert.


Man kann Procmail lernen und sinnvoll einsetzen, durch die bizarre
Syntax sind aber Lernkosten höher als bei Maildrop, gleichzeitig ist
die Funktionalität eingeschränkt. Warum also?


>Nur "OR" ist doof implementiert. Dafür bietet das "scoring" (=> 'man
>procmailsc') gleich eine ungleich flexiblere Lösung.

Wie wär's mit Assembler als Mailfilter? Ok, ist alles doof
implementiert, dafür bietet es eine ungleich flexiblere Lösung.

Oder anders ausgedrückt: Mit Maildrop benutze ich Scoring, wenn ich
scoren will. Für logisches Oder verwende ich ein logisches Oder. Das
macht die Sprache einfach, weil die Konzepte der Sprache sich mit den
Konzepten des Problems decken und ich darum nicht von Sprache vom
Problem abgelenkt werde.


Thorsten
-- 
A witty saying proves nothing.
    - Voltair

Attachment: pgpyzAZ3_J3kK.pgp
Description: PGP signature


Reply to: