emails ohne header per regexp aus mbox auslesen

emails ohne header per regexp aus mbox auslesen

am 28.02.2006 11:14:51 von Marcel Dix

Hallo Newsgroup!

Wie im Topic beschrieben möchte ich aus einer mbox-datei,
die durch fetch- und procmail erzeugt und gefüllt wird nur
die Bodies der eMails auslesen.

Ich hab das schon versucht, aber so richtig scheint es mir
nicht zu gelingen.

Auch möchte ich dazu nicht unbedingt ein Modul nutzen...
Es soll halt einfach per Regular Expressions passieren.

Danke schonmal!

Bye
Marcel

--
remove abuse at email

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 11:35:32 von Christian Lackas

* Marcel Dix [2006-02-28]:

Hallo Marcel,

> Wie im Topic beschrieben möchte ich aus einer mbox-datei, die durch
> fetch- und procmail erzeugt und gefüllt wird nur die Bodies der eMails
> auslesen.

das ist nicht sehr schwer. Eine Mail fängt mit

^From .*

an und endet am Dateiende oder wenn die nächste Mail anfängt.
Header und Body einer Mail sind durch die erste Leerzeile in der Mail
getrennt (dafür kann man z.B. split verwenden).

> Ich hab das schon versucht, aber so richtig scheint es mir
> nicht zu gelingen.

Dann zeig doch mal her was du so versucht hast.

> Auch möchte ich dazu nicht unbedingt ein Modul nutzen...

Warum nicht?

> Es soll halt einfach per Regular Expressions passieren.

Damit ist das sehr einfach zu regeln. Meist wird man die mbox-Datei
allerdings zeilenweise einlesen wollen, weil man ja nicht weiss wie groß
sie ist. Aber auch das ist eine kleine Fingerübung.

Gruß
Christian

--
Nicht mit Liebe sollst Du kochen sondern mit guten Zutaten.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 11:44:52 von Frank Seitz

Marcel Dix wrote:

> Auch möchte ich dazu nicht unbedingt ein Modul nutzen...
> Es soll halt einfach per Regular Expressions passieren.

Du weißt, dass der Rumpf von Emails unverarbeitet als
bloßer Text wegen MIME meist nicht sonderlich brauchbar ist?

Grüße
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 12:29:38 von Marcel Dix

Frank Seitz schrieb:
> Du weißt, dass der Rumpf von Emails unverarbeitet als
> bloßer Text wegen MIME meist nicht sonderlich brauchbar ist?

Ja, weiß ich.
Es sind ja auch nur Reintext-eMails ohne Umlaute oder sonstiger
Sonderzeichen.

> Grüße
> Frank

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 13:51:25 von Marcel Dix

Christian Lackas schrieb:
> Hallo Marcel,

Hallo Christian!

> Dann zeig doch mal her was du so versucht hast.

Ich hab es bis jetzt mit der Kommandozeile versucht, hab ich aber auch
nur in den Weiten des Internets gefunden.
Ich beschäftige mich noch nicht so lange mit Perl...

$ perl -p -0777 -e 's|^From.*(.*)^From.*|\1|s' /pfad/zur/mail; echo

Aber entweder gibt mir das die komplette maildatei (mbox) aus, oder
einfach gar nix...

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 14:10:04 von Marcel Dix

Hallo nochmal!
Ich bin jetzt dabei mir das ein wenig zusammenzubasteln.
Jetzt bin ich ja schon soweit, daß mir das Skript die "From"-Zeilen
ausspuckt.
Wie bring ich es jetzt dazu, mir ab einer bestimmten Zeile bis zu einer
bestimmten zeile den Text auszugeben?


---[CODE]---

#!/usr/bin/perl

use warnings;
use strict;

my $file="/home/harry/Mail/IN-default";

my @zeilen = ("");
open(MAILDAT, "<$file");
while() {
push(@zeilen,$_);
}
close(MAILDAT);

for (@zeilen) {
if (/^From\s/) {
print $_;
}
}

---[/CODE]---

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 14:45:36 von Christian Lackas

* Marcel Dix [2006-02-28]:

Hallo Marcel,

> $ perl -p -0777 -e 's|^From.*(.*)^From.*|\1|s' /pfad/zur/mail; echo

du willst also einfach nur alle Mail Header rausschmeissen und nur die
Body übrig behalten?

perl -p -0777 -e 's/^From .*?\n\n//smg' mailbox

Das ersetzt dann von einer Zeile die mit 'From' SPACE anfängt alles bist
zur nächsten Leerzeile.

Deine Zeile oben kann aus vielen Gründen nicht funktionieren. Z.B. ist
die 'From '-Zeile grundsätzlich von der 'From:'-Zeile zu unterscheiden.
Dann macht '.*(.*)' keinen Sinn, weil hinter 'allem was ich bekommen
kann' bleibt idR nicht viel übrig und dann endet ein Header ja nicht
beim nächsten From, sondern bei der ersten Leerzeile, und noch ein paar
Dinge mehr...

--
#! /bin/sh
t=/dev/tty;echo "Drei Chinesen mit nem Kontrabass"|tee $t|tr \
eiou a|tee $t|tr a e|tee $t|tr e i|tee $t|tr i o|tee $t|tr o u
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 14:55:14 von Christian Lackas

* Marcel Dix [2006-02-28]:

Hallo Marcel,

> Wie bring ich es jetzt dazu, mir ab einer bestimmten Zeile bis zu einer
> bestimmten zeile den Text auszugeben?
>
>
> ---[CODE]---
> #!/usr/bin/perl
> use warnings;
> use strict;
> my $file="/home/harry/Mail/IN-default";
>
> my @zeilen = ("");

Das ist unnötig, bzw. legst du hier schon direkt ein Element (den leeren
String) in @zeilen ab.

> open(MAILDAT, "<$file");

IMMER Rückgabewerte prüfen! Hast du eigentlich schon die FAQ gelesen?

http://www.worldmusic.de/perl/

open MAILDAT, '<', $file or die "open($file): $!\n";

> while() {
> push(@zeilen,$_);
> }

Das könnte man auch kurz schreiben:

my @zeilen = ;

> close(MAILDAT);

Aber dann hast du ja doch wieder alles auf einmal eingelesen...

> for (@zeilen) {

.... um dann hier doch wieder zeilenweise durch den Tet zu gehen.

> if (/^From\s/) {

Eine Mail fängt wirkllich mit 'From ', also mit einer Leerstelle nach
dem 'From' an, kein Tab, kein Formfeed, nur ein Space.

> print $_;
> }
> }

Versuch doch mal folgenden Ansatz:

my $in_header = 0;
while () {
if (/^From /) { $in_header = 1 }
elsif (/^$/) { $in_header = 0 }

print if $in_header; # gib nur header Zeilen aus
#print unless $in_header; # gib nur body Zeilen aus
}

Sollte sich von selbst erklären, sonst melde dich nochmal.

Gruß
Christian

--
Diejenigen, die etwas können, tun es. Diejenigen, die nichts können,
lehren es. Diejenigen, die nicht lehren können, verwalten es.
http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker

Re: emails ohne header per regexp aus mbox auslesen

am 28.02.2006 15:28:12 von Marcel Dix

Christian Lackas schrieb:


> open MAILDAT, '<', $file or die "open($file): $!\n";
>
> my $in_header = 0;
> while () {
> if (/^From /) { $in_header = 1 }
> elsif (/^$/) { $in_header = 0 }
>
> print if $in_header; # gib nur header Zeilen aus
> #print unless $in_header; # gib nur body Zeilen aus
> }

Hallo Christian!

Danke! Das war das was ich wollte! :)

Jetzt muss ich mir nur noch überlegen, wie ich die Ausgabe jetzt noch in
eine Datei geschrieben bekomm! Aber das gehört nicht mehr hier hinein!

Danke nochmals an alle die geholfen haben!

Grüße
Marcel