Am Sat den 13 Apr 2002 um 08:24:32AM +0200 schrieb Thomas Guettler:
On Fri, Apr 12, 2002 at 08:44:21PM +0200, Andre Schulze wrote:
_lange Mail_
Hallo,
ich möchte aller einer gewissen Zeit meine mailbox aufräumen. ...
Wenn die Mails alle in einer mbox sind kannst die im mutt öffnen. Dann mit "T" nach regulären Ausdrücken markieren, und mit ;s alle markierten in eine andere mbox speichern. Ggf. mit "cat" aus mehreren mboxen eine machen.
Ja, das hat Thorsten schon mal vor einer längeren Weile geschrieben. Das ist auch das, was ich bisher mit der Hand gemacht habe.
Wenn die Arbeiten zu viel sind, dass es keinen Sinn macht es manuell zu tun kannst du das, wie du schon angesprochen hast mit formail machen. Ich habe mal ein Script geschrieben um Mails vom mbox Format zu maildir zu wandeln. Das lässt sich bestimmt von dir anpassen: http://www.thomas-guettler.de/scripts/mbox2maildir.sh.txt. Das temporäre erstellen einer .procmailrc ist für dich wahrscheinlich nicht nötig.
Ich habe mal formail ausprobiert. Das dauert auf einem PII/233 an einem 100MBit NFS für 20MB etwa 5 Minuten. Eine schnellere Maschine brachte auch nicht mehr zu stande. Der NFS Server (das Cobalt Teil) war lokal auch nicht langsamer :-)
Am Sat den 13 Apr 2002 um 01:16:11AM +0200 schrieb Rocco Rutte:
Hi,
- Andre Schulze [04/12/02 20:44:21 CEST] wrote:
ich möchte aller einer gewissen Zeit meine mailbox aufräumen.
Was genau bedeutet 'aufraeumen'?
Alle Mails, die älter als n Tage sind archivieren. Mailinglisten sollen in separate files gehen. Alles soll nach Monaten sortiert sein. Ich möchte aber kontinuierlich aufräumen und nicht ein mal im Monat.
Wenn ich das mailbox file in procmail pipe (anders geht's gar nicht), escaped das so gut wie jede ^From ... Zeile mit ^>From bevor es meine speziell für's Aufräumen gebaute .procmailrc abarbeitet.
AFAIK moechte Procmail die Mails gern einzeln. Zumindest werden sie vom MTA einzeln zugestellt. Er denkt dann wahrscheinlich, deine Mailbox sei 1 Mail, weshalb wer alle 'From '-Zeilen im vermeindlichen Body escaped.
Nicht ganz, von etwa 3600 blieben 17 übrig ;-)
So nun die Frage: welches Programm außer procmail hilft mir weiter?
Procmail hilft da schon. Abhaengig von der groesse der Mailbox, kannst du die mit einem Skript in einzelne Dateien zerlegen und dann einzeln durch Procmail pipen (das koennte etwas dauern ;-).
Habe ich probiert. Geht auch prinzipiell. Es ist auch machbar, ältere Mails auszusortieren. Ich hätte es so gemacht: Einkommende Mails mit einem besser verarbeitbarem Timestamp versehen. (%s ist übrigens eine GNU Extension :-(
:0 f | formail -A "X-Arrival-Time: `date +%s`"
In der von formail aufgerufenen procmailrc werden dann die alten herausgefiltert und in ein weiteres procmail gepiped (also im batch Betrieb ein mal pro Tag oder so):
DEFAULT="$HOME/mail/tmpmail" DURATION=30000 VERBOSE LOGFILE=proc-log
:0 ARRIVAL=|grep X-Arrival-Time | awk '{print $2}'
NOW=`date +%s` # ok, Christian bitte wegsehen ;-) STALE=`bash -c "echo $((NOW-DURATION))"`
# no custom ARRIVAL-TIME? :0 * ? test -z "$ARRIVAL" ARRIVAL=$NOW
# process mails older than DURATION separately :0 * ? test $ARRIVAL -lt $STALE { :0 | procmail "$HOME/mail/procmailrc/lists" }
# the rest stays in the inbox :0 /home/andre/tmpmail/fresh
Das geht prinzipiell, dann kam ich aber auf den Trichter mal auf CPAN nachzusehen, welche Mail Module es gibt. Mail::Box kann eigentlich alles, was ich brauche.
formail behandelt so wie ich das verstanden habe jede mail einzeln.
Jein. Procmail bekommt sie einzeln, weshalb ein Formmail sie auch einzeln bekommt.
War etwas doof von mir erklärt. Ich gehe immer davon aus, daß ich eine mailbox in formail pipe. Dann erzeugt man i.d.R. jeweils für jede Mail in der mailbox einen procmail Prozess ala: cat $MAIL | formail -s procmail .procmailrc-batch
Das ist etwas zu viel für die arme, kleine, alte und gebrechliche Sparc worauf das läuft.
Ich wuerde sie zerlegen (notfalls auch erstmal speichern) und dann einzeln durch Procmail schieben. Z.B. mit Perl, awk, python, sh, ...
Jupp, Perl rules!
andre