#!/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();