[quote=krusty,12.08.2006, 20:31]@Dubu, habe ja auch schon bei den MIME:: Modulen nachgeschaut aber nichts brauchbares gefunden. Vielleicht kannst du ja was mit den MIME Header anfangen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01C6BD43.CC3430CE
Content-Type: text/plain
------_=_NextPart_000_01C6BD43.CC3430CE
Content-Type: application/octet-stream;
name="test.csv"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="test.csv"
[/quote]
Lustig. Bei einer CSV-Datei hätte ich den Typ "text/x-csv" erwartet. Aber "application/octet-stream" ist natürlich für alles zu gebrauchen, was nicht irgendwie interpretiert werden soll.
QuoteVielleicht kannst du mir ja nen Tipp geben wonach ich suchen könnte damit ich den Anhang mit einem MIME:: Module extrahieren kann und in eine separate Datei speichern kann.
Die MIME-Tools halte ich für genau das Richtige.
Vielleicht hilft dir das weiter:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Parser;
use File::Copy;
my $mimemail = 'mimemail.txt';
my $ziel = 'ziel.dat';
# Parser anlegen
my $parser = MIME::Parser->new() or die "Parserobjekt nicht anlegen: $!";
$parser->output_dir("./mimeout");
# Mail parsen, MIME::Entity zurueck erhalten
my $entity = $parser->parse_open($mimemail) or die "Kann $mimemail nicht parsen: $!";
# Gib mir alle Parts dieser Entity
my @parts = $entity->parts_DFS();
print "### Habe ", scalar @parts, " Teile gefunden. ###\n";
print "### Meldungen des Parsers:\n", $parser->results->msgs(), "### Ende der Meldungen des Parsers ###\n";
print $entity->dump_skeleton();
# Zeige alle Parts, die application/octet-stream sind :)
my $num = 0;
for my $part (@parts) {
++$num;
print "### Teil $num hat den Typ ", $part->effective_type(), "###\n";
next unless $part->effective_type() eq 'application/octet-stream';
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";
}
# Hier wird der dekodierte Teil ausgegeben. Geht natuerlich auch in eine Datei.
print "### Dekodierter Inhalt Teil $num ###\n", $bh->as_string, "### Ende Teil $num ###\n";
# Wo liegt die Datei?
print "### Pfad zu Body $num: ", $bh->path(), " ###\n";
# Datei kopieren (wenn es mehrere Teile mit application/octet-stream gibt, bleibt nur die letzte uebrig!)
print "### Kopiere ", $bh->path(), " nach $ziel ###\n";
copy ($bh->path(), $ziel) or warn $!;
}
# Alle temporaeren Dateien loeschen
$parser->filer->purge();
QuotePS: Wieso kann das zerlegen einer Mail nicht ebenso einfach sein, wie das Versenden einer Mail mit Anhang??? :rock:
Ist es doch. Oder dachtest du, das Versenden einer RFC-konformen MIME-Mail mit Anhang sei
noch einfacher? ;)
Da darf man nicht einfach so beliebig lange Zeilen oder 8-Bit-Zeichen benutzen ...