You are not logged in.

wcf.regNote.message

piep001

Intermediate

  • "piep001" started this thread

Posts: 338

Location: NRW

Occupation: Fachinformatiker (AE)

  • Send private message

1

Tuesday, March 29th 2005, 4:39pm

Mail-Body parsen & decodieren

Moinsen,
wieder einmal ein Problem.

Es geht darum, dass ich mittels dem Modul "MIME :: Parser" eine eMail eingelesen (geparst) und die Header-Daten und den Body in Variablen eingelesen lassen habe.
Soweit so gut, nur ist der Body leider noch kodiert und muss dekodiert werden.
Auf der Seite http://www.thomas-fahle.de/pub/perl/MIME/MIME_Code.html gibt es ein kleines Beispiel für zwei Kodierungs-Verfahren.

Meine Frage nun:
1) Wie kodiert man am besten eine eMail. Ist das auf der genannten Seite die beste Möglichkeit?
2) Welche Kodierungs-Verfahren gibt es und kann man überhaupt alles abfangen?
3) Wenn ich das Kodierungsverfahren "QuotedPrintable" bei einer 7-bit Verschlüsselung (also mit ASCII Zeichensatz) anwende, kriege ich trotzdem kein brauchbares Ergebnis. Wie kommt das?

Hier einmal ein Beispiel einer Test-Mail.
Vor dem Dekodieren (nach dem Parsen):

Source code

1
Dieser Zeichensatz enth=E4lt die schriftspezifis=chen Zeichen f=FCr westeurop=E4ische und amerikanische Sprachen. Der Zeichensatz= deckt die Sprachen Albanisch, D=E4nisch, Deutsch, Englisch, F=E4r=F6isch, Finnisc= h, Franz=F6sisch, Galizisch, Irisch, Isl=E4ndisch, Italienisch, Katalanisch, Niederl=E4ndisch, Norwegisch, Portugiesisch, Schwedisch und Spanisch ab. Lediglich einzelne Zeichen. Wie das niederl=E4ndische "ij" oder die deutschen Anf=FChrungszeichen.

Nach dem Dekodieren:

Source code

1
Dieser Zeichensatz enthõlt die schriftspezifishen f³r westeuropõische und amerikanische Sprachen. Der Zeichensatz= deckt die Sprachen Albanisch, Dõnisch, Deutsch, Englisch, Fõr÷isch, Finnisc= h, Franz÷sisch, Galizisch, Irisch, Islõndisch, Italienisch, Katalanisch, Niederlõndisch, Norwegisch, Portugiesisch, Schwedisch und Spanisch ab. Lediglich einzelne Zeichen. Wie das niederlõndische "ij" oder die deutschen Anf³hrungszeichen.
Spaß im Netz auf www.piep001.de

piep001

Intermediate

  • "piep001" started this thread

Posts: 338

Location: NRW

Occupation: Fachinformatiker (AE)

  • Send private message

2

Wednesday, March 30th 2005, 8:44am

Ich hab den Tipp bekommen, dass mein Problem mit der Ausgabe in der DOS-Konsole zu tun haben könnte, da diese wohl leider immer noch mit dem Zeichensatz cp437 arbeitet.

Nachdem ich die Daten in eine Textdatei schreiben lies, sah das Ergebnis folgendermaßen aus:

Source code

1
Dieser Zeichensatz enthält die schriftspezifischen Zeichen für westeuropäische und amerikanische Sprachen. Der Zeichensatz= deckt die Sprachen Albanisch, Dänisch, Deutsch, Englisch, Färöisch, Finnisc= h, Französisch, Galizisch, Irisch, Isländisch, Italienisch, Katalanisch, Niederländisch, Norwegisch, Portugiesisch, Schwedisch und Spanisch ab. Lediglich einzelne Zeichen wie das niederländische "ij" oder die deutschen Anführungszeichen unten fehlen.

Woher kommen die Gleichheitszeichen?
Spaß im Netz auf www.piep001.de

Prometheus

Administrator

Posts: 3,278

  • Send private message

3

Wednesday, March 30th 2005, 9:05am

in deinem beispiel nach dem parsen und vor dem decodieren sind die auch drin. könnten das ehemals vorhandene zeilenumbrüche sein? hab mit perl bis jetzt sehr wenig gemacht auch wenn ich in perl sogar mal ne kleine prüfung gemacht hab aber mit mail geschichten hatte ich noch nie was am hut in perl bzw. mit diesen funktionen.
Jedwege Anfragen bitte an Technomausi oder ShaoKhan richten. Dieses Konto ist und bleibt inaktiv.

Ephraim

Professional

Posts: 826

Location: coder-board.info

Occupation: Info-Student

  • Send private message

4

Wednesday, March 30th 2005, 10:06am

Hmm ich glaub die ='s kommen von der Mail ansich. Die ist ja auch in nem bestimmten Mime type verschickt worden und es schaut fast so aus als ob die ganzen Sonderzeichen ersetzt wurden durch "=XX" z.B. ä = "=E4" usw. insofern würd ich die vor dem Codieren mal austauschen mit
$text~=s/=E4/ä/g;

Oder so ...

Ciao Ephraim

piep001

Intermediate

  • "piep001" started this thread

Posts: 338

Location: NRW

Occupation: Fachinformatiker (AE)

  • Send private message

5

Thursday, March 31st 2005, 3:44pm

Sorry, wollte erst alles soweit testen, dass ich hier nicht immer so Halb-Sachen schreibe und hinterher alles wiederrufen muss.
Hab mich in nem Perl-Forum schlau gemacht und herausgefunden, wie man mit Hilfe des MIME:Parser Moduls dekodieren kann und so. Bin noch am rumprobieren und lesen, aber sieht schon ganz gut aus. Wenn alles fertig ist oder ich noch mal Probs irgendwo habe, melde ich mich.

Den Code stell ich hinterher gerne zur Verfügung. Ist aber, wenn man weiß wie, recht simple.
Am besten einer setzt sich daneben, sagt eben wie wann wo und dann rattert man nur noch runter, naja, gibt halt keinen der das drauf hat hier.

Danke euch beiden.
Cu, piep


edit:
Aber du könntest mir mal eben zwei Regex geben um folgende String entsprechend zu formatieren.

"Tim Meier" <tim.meier@test.de>
...soll nur die Mail-Adresse übrig bleiben, also:
tim.meier@test.de

<order@law.de>
...soll auch nur die Mail-Adresse übrig bleiben, also:
order@law.de

thx schon mal
Spaß im Netz auf www.piep001.de

This post has been edited 2 times, last edit by "piep001" (Mar 31st 2005, 4:30pm)


piep001

Intermediate

  • "piep001" started this thread

Posts: 338

Location: NRW

Occupation: Fachinformatiker (AE)

  • Send private message

6

Thursday, April 7th 2005, 9:31am

Den Body der einzelnen MIME-Parts bekommt man beim rekursiven Auslesen mit...

Source code

1
2
$body = $mime_part->bodyhandle();
$body->as_string;

Und der Header lässt sich folgendermaßen am einfachsten auslesen...

Source code

1
2
3
4
5
6
7
8
$top = $ent->head();
$top->decode;
$top->unfold;

$from = $top->get('From');
$to = $top->get('To');
$subject = $top->get('Subject');
...
Spaß im Netz auf www.piep001.de

wcf.user.socialbookmarks.titel