der fehler liegt beim parsen ...
if(my $parsed = Email::MIME->new(@$message)){
bringt nicht das gewünschte ergebnis. du übergibst hier einen array. wenn du print einen gibst, gibt es ihn aus, daher scheint es alles korrekt zu sein ... aber Email::Mime nimmt einfach den ersten parameter. der rest bleibt weg. daher klappt's nicht.
etwas klarer wird's in meinem code, das sind die zeilen
my $message = $pop->get($msgid);
my $messageall = join("", @$message);
if(my $parsed = Email::MIME->new($messageall)){
und komplett:
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
#!/usr/bin/perl -w
use strict;
use Email::MIME;
use Net::POP3;
use Data::Dumper;
#my $file = 'Beispielnachricht.txt';
#my $file = 'multipart.txt';
#my $message = do { local( @ARGV, $/ ) = $file; <> };
my $host = '...';
my $user = ':::';
my $pw = '---';
my $pop = Net::POP3->new($host) || die("Kein Kontakt zu $host. $!");
my $anzahl = $pop->login($user, $pw);
my $msgnums = $pop->list; # hashref of msgnum => size
my @msgids = keys %$msgnums;
my $msgid = shift(@msgids);
my $message = $pop->get($msgid);
my $messageall = join("", @$message);
if(my $parsed = Email::MIME->new($messageall)){
my $absender = $parsed->header('from');
my $subject = $parsed->header('subject');
my @parts = $parsed->parts;
my $parts = $parsed->parts;
print "Absender: " . $absender . "\n";
print "Betreff: $subject\n";
print "Parts: $parts\n";
for my $part (@parts){
if(scalar @{$part->{'parts'}} > 0){
for my $part (@{$part->{'parts'}}){
#next if($part->content_type =~ m/text\/html/);
my $text .= $part->body;
print "Text: $text\n";
}
}
}
}