#!/usr/bin/perl -w
use strict;
use warnings;
use Test::More;
plan tests => 5;
main: {
my ($fh, $mail_text, $entity, $parser);
#-- Check whether Digest::MD5 is available
my $has_md5 = eval "require Digest::MD5";
#-- Load MIME::Parser
use_ok("MIME::Parser");
#-- Prepare parser
$parser = MIME::Parser->new();
$parser->output_to_core(1);
#-- Switch parser to encoded mode
$parser->decode_bodies(0);
#-- Parse quoted-printable encoded file
$entity = parse_qp_file($parser);
#-- Check if body is stored encoded
ok($entity->bodyhandle->is_encoded, "Entity stored encoded");
#-- Check if MD5 resp. length match as expected
$mail_text = $entity->as_string;
if ( $has_md5 ) {
my $md5 = Digest::MD5::md5_hex($mail_text);
ok($md5 eq "a00f9b070d3153bbdc43d09a849730df", "Encoded MD5 match");
} else {
my $len = length($mail_text);
ok($len == 665, "Encoded length match");
}
#-- Switch parser to decoded mode
$parser->decode_bodies(1);
#-- Parse quoted-printable encoded file
$entity = parse_qp_file($parser);
#-- Check if body is now stored decoded
ok(!$entity->bodyhandle->is_encoded, "Entity stored decoded");
#-- Check if MD5 resp. length match as expected
$mail_text = $entity->as_string;
if ( $has_md5 ) {
my $md5 = Digest::MD5::md5_hex($mail_text);
ok($md5 eq "54a4ccb3a16f83e851581ffa5178f68a", "Decoded MD5 match");
} else {
my $len = length($mail_text);
ok($len == 609, "Decoded length match");
}
}
#-- Parse quoted printable file and return MIME::Entity
sub parse_qp_file {
my ($parser) = @_;
open (my $fh, "testmsgs/german-qp.msg")
or die "can't open testmsgs/german-qp.msg: $!";
my $entity = $parser->parse($fh);
close $fh;
return $entity;
}
1;