linux-l: procmail und Rueckgabewerte externer Programme

Oliver Bandel oliver at first.in-berlin.de
Sa Apr 22 20:28:51 CEST 2000


Hi!


On Sat, 22 Apr 2000, Ralph Angenendt wrote:

> On Sam, Apr 22, 2000 at 11:53:52 +0200, Oliver Bandel wrote:
> > Hi!
> > 
> > On Fri, 21 Apr 2000, Ralph Angenendt wrote:
> > 
> > > Schau dir mal die Flags 'f', '(w|W)' bzw. '?' in 'man procmailrc' an.
> > 
> > Hmhhh..
> > "f"? Naja??; aber "?" könnte es sein, danke.
> 
> Durch 'f' wird die pipe als Filter angesehen.

Kann man doch auch mit | machen.

> Wenn ich das richtig
> gesehen habe, dann geht procmail mit dem Stdout des Programms, welches
> in der pipe aufgerufen wurde, den Rest der procmailrc durch,
> terminiert also nicht, obwohl eine "Matching Regexp" gefunden wurde.

Hmhh, aha. Habe ich aus der Doku nicht rauslesen können.

[...]
> > Will diesen nervigen Spam ausfiltern.
> > Will Perl nehmen, hat so nette regexp's.
> 
> Was Spamblocking angeht: Schau Dir mal unter
> <ftp://ftp.belwue.de/belwue/software/> spamblock an, eine

Aha, guter Hinweis. Vielleicht schaue ich da mal vorbei.
Wobei ich allerdings in letzter Zeit hauptsächlich von Spam
genervt werde, der von sonstewo herkommen muss oder aus
Fehl-Konfigurationen stammt oder beschissene Zeichensätze
nutzt, oder was weiß ich (ist aber auch egal: Spam => weg damit).

Erkennbar ist dieser Seltsam-Spam immer daran, daß da
Binär-Daten drin stehen. Ist also vollkommen blöde,
aber auch um so einfacher auszusortieren.


Ich habe aber nun eine Lösung gefunden:

In's .procmailrc kommt rein:


--------------
:0 w
binary=|bd_filter

:0: lockfile.spam
* !binary ?? ^0$
procmail-versuche/binaries
--------------

Das Programm bd_filter liefert die Anzahl der Zeichen
zurück, bei denen das 8. Bit gesetzt ist, abzüglich der
Anzahl der Umlaute. Es werden also alle nicht-Umlaute-
8-Bit-Zeichen gezählt.

Ist der Wert 0, so ist es eine Mail, die ich als Textmail
akzeptiere, ansonsten gilt sie als Binärmail.


Mit dem ersten Eintrag im procmail-File setze ich die
variable "binary" auf das Ergebnis (stdout) des
Programms bd_filter. Mit "w" wird auf's Programmende
gewartet.

Mit dem zweiten Eintrag prüfe ich den Wert der Variable
"binary" auf eine einzelne "0" als String. Das Ergebnis
wird dann mit dem "!" noch invertiert. Wenn das Gesamt-
Ergebnis des Recipes dann zutrifft, der Wert also != "^0$"
ist (ne "0"), dann haue ich die Datei in den Folder "binaries"
(für diese Versuche), der in meinem echten Mailbereich dann
"Muell" heißt.

So, und nun das Perl-Script, das hier als bd_filter eingesetzt
wird:

----------------------------
#!/usr/bin/perl -w

while(<>)
{
  $achtbit += tr/\200-\377//; # Anzahl der gefundenen 8-Bit-Zeichen addieren
  $achtbit -= tr/äöüÄÖÜß//;   # Anzahl der Umlaute abziehen
}

print $achtbit;
__END__
----------------------------


Tschüß,
    Oliver


-- 
Tap as Tap can!    1. Internationales         Infos: http://www.germantap.org/
***************    Steptanzfestival Berlin,          specials/2000/istf-01.shtml
                   25. - 27. Mai 2000



Mehr Informationen über die Mailingliste linux-l