Wie kann ich meine Procmail-Filter auf meinen Posteingang anwenden?

9

Letzte Nacht habe ich eine Mailingliste abonniert und heute Morgen festgestellt, dass mein Procmail-Filter nicht für viele Mailinglistennachrichten gilt. Jetzt habe ich viele weniger wichtige Mailinglisten-Nachrichten, die mit meinen wichtigeren geschäftlichen E-Mails in meinem Posteingang durchsetzt sind.

Ist es möglich, alle E-Mails in meinem Posteingang über meine Procmail-Filter erneut auszuführen?

Hinweis: Ich verwende das Maildir-Format

Cory Klein
quelle
1
Werfen Sie
Ulrich Dangel
Das ist eine Teillösung. In diesem Fall würden einige E-Mails definitiv zurück in den Posteingang geleitet. Es scheint, dass es bereits eine * nux-Lösung für dieses Problem geben sollte, die mir einfach nicht bekannt ist, anstatt ein Skript zu schreiben, um den vorhandenen E-Mail-Zustellungsprozess zu simulieren.
Cory Klein
Das Problem ist, dass procmail nur für E-Mail-Nachrichten funktioniert, nicht für Ordner, Mboxes oder andere Objekte. Dies bedeutet, dass Sie entweder die Zustellung simulieren oder etwas wie Thunderbird verwenden und dort filtern müssen.
Ulrich Dangel

Antworten:

3

Ich glaube das wird funktionieren. Sie müssen ausgeführt werden, formailum die E-Mail neu zu formatieren und zurückzusenden procmail.

Aus dem Maildir-Verzeichnis:

cat * | formail -s procmail

George M.
quelle
3
Funktioniert das eigentlich? Würde es nicht alle alten Nachrichten dort lassen, wo sie waren?
cnst
2

Möglicherweise können Sie dies an Ort und Stelle tun:

$ for m in Mail/{cur,new}/*; do echo $m; procmail <$m; rm $m; done

Sie müssen anschließend jede Original-E-Mail entfernen, sonst wird sie von procmail dupliziert.

Es wird auch alles als neu aufgezeichnet. Ich bin mir nicht sicher, wie ich damit umgehen soll.

Jake
quelle
Dies erscheint auf Disc Io verschwenderisch: Die Procmail-Filterung erfolgt normalerweise nur auf der Grundlage von Headern. Bei solchen Pipings wird jedoch die gesamte Nachricht erneut gelesen und auf die Disc geschrieben. Außerdem sollten Sie die Datei (autsch!) Bedingungslos entfernen, falls procmail nicht genügend Speicherplatz hat oder auf ein anderes Problem stößt, was ebenfalls ziemlich beängstigend erscheint. Ich würde sagen, dass dies für Maildir eine völlig inakzeptable Lösung ist.
cnst
1
Dies könnte schrittweise verbessert werden, indem procmail < $m && rm $mstattdessen procmail < $m ; rm $mdie Nachricht nicht entfernt wird, wenn procmail fehlschlägt.
Rrauenza
2

Wenn Sie mutt verwenden, können Sie die E-Mail über procmail weiterleiten und das Original mit einem Tastenbefehl wie folgt aus Ihrem Posteingang löschen:

muttrc:

macro index y '<enter-command>unset wait_key<enter><tag-prefix><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><tag-prefix><delete-message><enter-command>set wait_key<enter>'

macro pager y '<enter-command>unset wait_key<enter><pipe-entry>/usr/bin/procmail /home/user/.procmailrc<enter><delete-message><enter-command>set wait_key<enter>'

gefunden auf https://mikeburnscoder.wordpress.com/2011/06/12/one-big-mutt-inbox-filtered-after-the-fact-using-procmail/

user3630647
quelle
0

Es scheint, als gäbe es dafür keine gute Lösung: procmail scheint nur E-Mail-Eingaben von zu akzeptieren stdin, was die Anzahl der Anwendungen einschränkt.

Ich sah mich einer ähnlichen Situation gegenüber, und die beste Lösung, die meinen Anforderungen entsprach, bestand darin, einfach zu duplizieren, was ich procmailtun wollte , aber was es definitiv nicht kann, mit meinem eigenen kleinen Skript, was ausreichen sollte, wenn Sie nur ein oder zwei einfache Regeln haben dass Sie sich kümmern müssen:

cd ~/Maildir/
sh -c 'for i in `egrep -l "^Delivered-To: [email protected]" cur/*`; \
    do mv $i .FreeBSD.perforce/$i; done'

Dies ist auch nicht optimal, sollte aber zumindest nicht unter unnötigen E / A- und potenziellen Datenverlustproblemen leiden.

cnst
quelle