Ich schreibe die Betreffzeile für bestimmte eingehende E-Mails je nach An:-Feld um:
:0fhw
* ! ^TO_user@domain\.com\>
* ^TO_[^<>@ ]+@domain\.com\>
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPAM]$MATCH"
Der obige Code (aus meiner früheren FrageProcmail schreibt die Betreffzeile neu, wenn der Benutzer des E-Mail-Empfängers den Übereinstimmungstest nicht besteht) funktioniert perfekt - wenn ich E-Mails von etwas ANDEREM bekomme ALS[email geschützt], die Betreffzeile wird umgeschrieben als [SPAM] (ursprünglicher Betreff)
Ich möchte jedoch mehrere Bedingungen dieser Art verwenden. Der Arbeitsblock oben soll der letzte sein, vorher möchte ich jedoch die Betreffzeile umschreiben, wenn das „An“ mit einer anderen Adresse übereinstimmt.
Also habe ich diesen Block direkt darüber hinzugefügt:
:0fh
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH"
$DEFAULT
... und das funktioniert - E-Mails an '[email geschützt]' lassen Sie ihre Betreffzeile umschreiben.
Das Problem ist, dass Procmail nicht anhält, sondern auf dienächste[email protected]
Block und schreibt es erneut um. Die Betreffzeilen gesendeter E-Mails werden also wie folgt umgeschrieben:
[SPAM] [SPECIAL] Ursprüngliche Betreffzeile, bla bla
Warum ist das so? Warum $DEFAULT
führt die Aktion am Ende des ersten Blocks nicht dazu, dass Procmail die Verarbeitung dieses E-Mail-Teils anhält?
Wie kann ich den neuen Block anpassen undstoppendiese Post bearbeiten und die Sache damit einfach hinter sich bringen?
Antwort1
Das $DEFAULT
am Ende ist ein Syntaxfehler. Sie können nicht mehrere Aktionen für dasselbe Rezept angeben.
Was Sie tun können, ist, es in zwei Rezepte aufzuteilen oder in diesem Fall einfach das Umschreiben und die Übermittlung zu kombinieren.
:0:
* ^TO_special@domain\.com
* ^Subject:\/.+
| /usr/local/bin/formail -I"Subject: [SPECIAL]$MATCH" >>$DEFAULT
Dies hat die Flags nicht mehr, fh
weil wir die ganze Nachricht durchschieben wollen (nicht nur die Header, was der h
Fall ist) und wir die Ergebnisse der Pipeline zustellen und nicht zurück in Procmail erfassen wollen (was der f
Fall ist).
Dies setzt voraus, dass es $DEFAULT
sich um eine Datei und nicht um ein Verzeichnis handelt. Daher fügen wir auch eine zweite hinzu, :
um die Sperre anzugeben.
Wenn Sie zwei Aktionen unter einem einzigen Bedingungssatz angeben möchten, können Sie Klammern mit mehreren darin enthaltenen Rezepten verwenden. Jedes Rezept kann null oder mehr Bedingungen, aber nur eine Aktion haben.
:0
* ^TO_special@domain\.com
* ^Subject:\/.+
{
:0fhw
| formail -I"Subject: [SPECIAL]$MATCH"
:0:
$DEFAULT
}
aber in diesem Fall ist das eine unnötige Komplikation.
(Es wäre vielleicht auch idiomatischer, die ^Subject:
Bedingung in das formail
Rezept zu verschieben, wo sie logisch hingehört, aber das ist sowieso nur eine Tangente.)
Stellen Sie außerdem nebenbei sicher, dass Ihr PATH
gleich zu Beginn korrekt ist, .procmailrc
damit Sie nicht den vollständigen Pfad für externe Dienstprogramme wie angeben müssen formail
.