[quote=Quenten,29.03.2005, 16:50]1) Wie kodiert man am besten eine eMail. Ist das auf der genannten Seite die beste Möglichkeit?
[/quote]
Nein, MIME::Parser hat alles noetige schon eingebaut. Wenn eine Mail einen MIME-Part enthaelt, wird dieser vom Parser als MIME::Entity geliefert. In
perldoc MIME::Entity kann man nachschauen, wie man an den dekodierten Inhalt kommt.
Hier mal ein kurzes Beispiel. Es wird evtl. nicht mit allen Kombinationen (insbes. eingebetteten "message/rfc-822" Teilen) klar kommen, aber als "Proof of Concept" hilft es vielleicht:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Parser;
# In dieser Datei liegt der Quelltext der Mail
my $mimemail = 'mimemail.txt';
# Parser anlegen
my $parser = MIME::Parser->new() or die "cannot create parser object: $!";
# Mail parsen, MIME::Entity zurueck erhalten
my $entity = $parser->parse_open($mimemail) or die "cannot parse $mimemail: $!";
# Gibt es mehrere Parts?
my @parts = $entity->parts();
# Wenn nicht, nimm $entity selber als Part
push @parts, $entity unless @parts;
# Dekodiere alle Parts
my $num = 1;
for my $part (@parts) {
print "### Teil $num hat den Typ ", $part->effective_type(), "###\n";
print "### Header von Teil $num ###\n", $part->head()->as_string, "### Ende Header Teil $num ###\n";
# bodyhandle() liefert uns ein MIME::Body Objekt mit dem Inhalt des Parts
my $bh = $part->bodyhandle();
unless ($bh) {
print "### Teil $num hat keinen Body ###\n";
}
print "### Dekodierter Inhalt Teil $num ###\n", $bh->as_string, "### Ende Teil $num ###\n";
++$num;
}
Quote2) Welche Kodierungs-Verfahren gibt es und kann man überhaupt alles abfangen?
Gebraeuchlich sind die genannten, Base64 und Quoted Printable.
Quote3) Wenn ich das Kodierungsverfahren "QuotedPrintable" bei einer 7-bit Verschlüsselung (also mit ASCII Zeichensatz) anwende (im Beispiel ist 8-bit angegeben), kriege ich trotzdem kein brauchbares Ergebnis. Was muss ich ändern?
Das ist ja schon oben beantwortet worden.