Ich habe einen lokalen Procmail-Benutzer „bob“.
Wenn eine E-Mail eintrifft und übereinstimmt[email geschützt], sollten keine Maßnahmen ergriffen werden.
Wenn jedoch eine E-Mail eingeht und die Adresse [irgendetwas_anderes]@domain.com lautet, möchte ich die Betreffzeile umschreiben und am Anfang „[Spam]“ einfügen.
Es handelt sich also um eine umgekehrte Übereinstimmung mit „bob@“ (Übereinstimmung mit allem anderen als bob@) und wir behalten die ursprüngliche Betreffzeile bei, fügen ihr lediglich „[spam]“ voran.
Wie kann ich das mit Procmail machen?
Antwort1
Ihre Anforderungen sind ziemlich unklar. Procmail kann jede beliebige Zeichenfolge abgleichen, aber meinen Sie wirklich, dass die Zeichenfolge irgendwo in der Nachricht gesucht werden soll? Und meinen Sie wirklich, dass Nachrichten ohne Zeichenfolge im domain.com
Sinne dieser Regel ignoriert werden sollen?
:0 HB
* ! ()\<bob@domain\.com\>
* @domain\.com\>
{
:0fhw
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
}
Die Wortgrenzen „ \<
und“ verhindern die Übereinstimmung von Teilzeichenfolgen wie „ oder“ , und die leeren Klammern sind ein Hack, da Procmail bei regulären Ausdrücken, die mit einem Backslash beginnen, seltsam reagiert.\>
tombob
subdomain.complete.org
Wenn Sie nur in den Headern suchen möchten, lassen Sie das HB
aus der ersten Doppelpunktzeile weg (Sie können das auch stehen lassen, H
aber das ist die Standardeinstellung, wenn Sie keine Flags setzen). Wenn Sie einen bestimmten Header abgleichen möchten, schreiben Sie ihn aus. Wenn Sie den Empfänger speziell untersuchen möchten, können Sie das mit dem Makro problemlos in einer Reihe verschiedener Header ( , usw.) ^TO_
tun .To:
Cc:
:0fhw
* ! ^TO_bob@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| formail -I"Subject: [spam]$MATCH"
Da wir die HB
Flags weggelassen haben, können wir zwei Rezepte mit unterschiedlichen Flags kombinieren. Das zweite ^TO_
prüft, ob alle Adressen enthalten sind bob
, die jedoch bereits durch die vorherige negierte Bedingung ausgeschlossen wurden.
Es gibt noch einige Sonderfälle, die möglicherweise weiter untersucht werden müssen. Wenn Sie Ihre Frage bearbeiten, um sie zu klären, kann ich sie vielleicht aktualisieren, um mehr als nur die Grundlagen abzudecken.
SMTP erfordert jedoch nicht, dass der Empfänger in den Headern angegeben wird. Der klassische Fall ist, Bcc:
was im Wesentlichen auch der Mechanismus ist, der von vielen Mailinglisten verwendet wird. Vielleicht schreibt Ihr MTA den Empfänger in aus, Delivered-To:
aber genau genommen ist es besser, diesen Filtertyp stattdessen im MTA zu implementieren.