Multiparts contain multiple parts. Iterate over them:
use strict;
use warnings;
use Email::MIME;
use Data::Printer;
use feature qw/say/;
my $source = <<EOF;
Content-Type: multipart/related;
boundary="_004_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_";
type="multipart/alternative"
MIME-Version: 1.0
--_004_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: multipart/alternative;
boundary="_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_"
--_000_47C8E15E8EEDCB4E94E891F9414C019A0CB5BDEE79DFW1MBX07mex0_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
Test Body
EOF
my $msg = Email::MIME->new($source);
for my $part ($msg->parts) {
if ($part->content_type =~ m!multipart/alternative!
or $part->content_type eq '' )
{
say "Found Multipart";
for my $subpart ($part->parts) {
say $subpart->body;
}
}
}
Outputs:
C:\>perl test_mime.pl
Found Multipart
Test Body