Hallo,
ich möchte aller einer gewissen Zeit meine mailbox aufräumen. 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. Da dann faktisch so gut wie keine mails mehr in der mailbox enthalten sind (die ^>From Dinger werden als bogus angesehen) müssen auch meine .procmailrc Rezepte fehlschlagen.
Wenn ich die .procmailrc an die Stelle lege, wo sie auch vom MTA gelesen wird und mir jetzt eine Testmail über den MTA verschicke (also nicht als User in procmail pipe, sondern schön mit mutt mir was bounce), dann tut procmail auch nix escapen.
Die Schalter -m oder -Y tuen dieses Verhalten nicht abschalten :-( So nun die Frage: welches Programm außer procmail hilft mir weiter? formail behandelt so wie ich das verstanden habe jede mail einzeln. Das ist etwas zu viel für die arme, kleine, alte und gebrechliche Sparc worauf das läuft.
Any help appreciated,
andre
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'?
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.
Wenn ich die .procmailrc an die Stelle lege, wo sie auch vom MTA gelesen wird und mir jetzt eine Testmail über den MTA verschicke (also nicht als User in procmail pipe, sondern schön mit mutt mir was bounce), dann tut procmail auch nix escapen.
Logisch.
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 ;-).
formail behandelt so wie ich das verstanden habe jede mail einzeln.
Jein. Procmail bekommt sie einzeln, weshalb ein Formmail sie auch einzeln bekommt.
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, ...
Cheers, Rocco.
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
Hi,
* Andre Schulze [04/14/02 23:07:53 CEST] wrote:
Am Sat den 13 Apr 2002 um 01:16:11AM +0200 schrieb Rocco Rutte:
- 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.
Frage: betrifft das generell alle Mails oder nur bestimmte?
Wenn das alle betrifft, hilft dir vielleicht meine Loesung weiter (zumindest ich komme ganz gut klar damit): Das archivieren wird mit Procmail schon beim Mail-Eingang gemacht (alles in ein File, sollte sich aber auch fuer Mailinglisten aufspalten lassen). Mails aelter als n Tage kannst du dann per folder-hook und tags mit Mutt automatisch als geloescht markieren. Ausserdem ist es ganz praktisch, falls man mal eine Mail versehentlich loescht.
Somit raeumst du kontinuierlich auf und du musst dir fuer mutt keinen abbrechen, um das Speichern/Aufteilen per Hand zu organisieren.
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`"
Bei mir tut folgendes fuer 1 Backup-File:
:0c $HOME/archive/`date +%Y.%m`
Wenn du vorher noch rausbekommst, in welche Datei (abhaengig von der Liste) das ganze gehen soll, dann koennte man ja:
:0c $HOME/archive/$target/`date +%Y%m`
schreiben. Damit waere das archivieren erledigt. Wenn du bei deiner Listenabfrage noch eine zweite Variable setzt, kannst du hinterher einfach mit:
:0 $spoolfile
die Mails in die gewuenschten Spools schicken und hast deine Backups.
Nur bekommst du damit Probleme, wenn du alte Files aufraeumen moechtest, weil `date` immer die aktuelle Zeit holt. Das kannst du aber auch noch mit `formail -x` herausbekommen und umformatieren (was auch wieder schiefgeht, wenn jemand kaputte Header hat).
Cheers, Rocco.
On Fri, Apr 12, 2002 at 08:44:21PM +0200, Andre Schulze wrote:
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.
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.
thomas
Hallo Andre,
die grundsätzliche Antwort, nämlich das Auftrennen der Mailbox für procmail ist ja schon gekommen. Jedoch würde ich dafür einfach formail nehmen, der kann nämlich Mails trennen (hatte früher mal ein Script das mir diverse MLs auf meinem Uni-Account in 50er Blöcke gepackt hat und dann zu Hause hat ein anderes Script alles wieder klein gemacht).
Und wenn Du dir dann die Rules für procmail erstellt hast, kannst Du dann gleich alle einlaufende Mail einsortieren... Procmail kann übrigens auch in bessere Formate als mbox filtern (mh, maildir -- maildir wird leider kaum von MUAs unterstützt).
Tschüß, Carsten
lug-dd@mailman.schlittermann.de