Hallo Dieter!
(& Alle, die noch mails in einem Outlook herumliegen haben!)
Hier die versprochende Anleitung.
Ziemlich ausführlich, im Linux-User-Stil, aber was soll's...
Erstmal öffnest Du unter Windows das dumme Outlook und ziehst alle
e-mails, die Du unter Linux haben möchtest, per Drag'nDropp (also
bemaust) in irgendeinen Ordner, den Du von Linux aus lesen kannst. Bei
mir war das z.B. "C:\Mail\".
Da liegen dann haufenweise Dateien mit der Endung .eml drinnen, die
die Namen der Nachrichten tragen.
(MIME-Typ ist übrigens 'message/rfc822', was auch immer das heißen
mag...;-)
(Diesselbe Aktion im Messenger ergibt Dateien mit .txt Endung, aber
untitled benamst... was den Messenger betrifft, müßte aber ein
einfaches Kopieren der mailboxes (hier unter
C:\Programme\Netscape\Users\bjoern_pfeiffer\Mail) in das entsprechende
Verzeichnis unter $HOME genügen (und dort dann ein "chmod -x *").
Scheinen im
mailbox Standardformat zu sein, während die im Outlook-Ordner offenbar
verschlüsselt sind. Tja, halt dumm gelaufen, wenn man kein
vernünftiges Dateisystem mit Rechtevergabe zustandekriegt...)
Wieder im Pinguinland kopierst Du dann den Ordner in einen Test-Ordner
in $HOME (oder /tmp oder so), öffnest eine Konsole, begibst Dich
dorthin und gibst die
magische Zeile ein, die gleich folgt...
Nebenbei: Für diese verdammte Zeile hab ich mir ganze zwei
Nächte um die Ohren gehauen, versucht mir ein Script dafür
zusammenzubasteln, das am Ende über 100 Zeilen lang geworden ist,
habe das Bash-Reference-Manual und die manpages von find, formail, ls,
cut, sed und weiß der Teufel wovon noch, drei mal von vorne bis hinten
und kreuzweise durchgelesen... alles nur, um beim Morgengrauen des
zweiten Tages verblüfft festzustellen, das alles Notwendige in einer
einzigen Zeile Platz hat! Kruzum: Ich glaube, sowas werd ich mir
freiwillig und unbezahlt kein zweites mal mehr antun - auch wenn's
Spaß macht, aber, gesund ist sowas ganz bestimmt nicht... ;-)
find . -name "*.eml" -print0 |xargs --null cat |formail -eds \
>>_NEW_MAILBOX_
(oder natürlich in einer Zeile, ohne '\'. Am Besten in eine Datei
schreiben und die ausführbar machen ("chmod +x Datei").)
Ergebnis: eine dicke, fette mailbox "_NEW_MAILBOX_" mit allen Deinen
mails!!! :-)
Laaange Erläuterung:
Diese magische Zeile durchsucht das Verzeichnis, in dem Du gerade bist
("find .") und alle Unterverzeichnisse (ist bei find Standard - läßt
sich mit "-maxdephts 1" hinter dem '.' auf das aktuelle beschränken)
nach Dateien mit der Endung .eml und gibt die Pfadnamen der gefundenen
Dateien als null-terminierte strings (-print0 )in die Pipe (|), hinter
der sie von "xargs" als solche (--null) in Empfang genommen werden,
das nichts weiter tut, als diese Dateinamen an das folgende "cat" zu
übergeben, das die Dateien von der Platte liest und in die Pipe
schickt, hinter der der Inhalt der Dateien (die jetzt alle
aneinanderhängen) von "formail" in Empfang genommen wird, das sich mit
den Schaltern "-eds" dazu überreden läßt, so ziemlich alles in ein
Standard-mailbox Format zu bringen. ">>" leitet dann endlich die
Ausgabe von formail in die Datei _NEW... um, die dann hoffentlich alle
mails enthält, die da herumliegen.
Mit einem "mutt -f _GrosseFetteMailbox_" kannst Du Dich dann sogleich
vom Erfolg dieser Operation überzeugen.
Das ganze Problem dabei waren die Leerzeichen in den Dateinamen. Die
Bash kommt mit solchen einfach nicht klar, zumindest nicht in
Skripten. Bei "Eigene Dateien" geht sie einfach davon aus, das es zwei
Dateien seien, und die Befehle finden dann ihr Futter nicht. ("xargs"
war da die Rettung.) Deswegen der ganze Aufwand: Um eine einzige Datei
ins mailbox-Format zu bringen reicht ein "cat 'DATEI MIT LEERZEICHEN'
| ..." wie oben schon aus. (Eigentlich war ich ja nur zu faul, die
ganzen Dateien der Reihe nach umzubennen... ;-)
@Martin Schmitt: Wie machst Du sowas in Perl? Wenn das für Perl eine
leichte Übung ist, werd ich garantiert nie mehr sowas für die Bash
schreiben... :-)
Formail kann übrigens auch dazu dienen, einen Digest, wie es ihn ja
auch für unsere Liste gibt, ins mailbox-Format zu bringen:
man formail:
EXAMPLES
To split up a digest one usually uses:
formail +1 -ds >>the_mailbox_of_your_choice
or
formail +1 -ds procmail
(letzteres stellt die ganzen mails lokal neu zu, wenn procmail als der
lokale Postbote vom Dienst installiert ist.)
(Hab ich noch nicht getestet. Wenn geht, könnte man das vielleicht mal
auf die Homepage setzen?)
Ciao, Björn.
---------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org