Email-Outlook-Message
view release on metacpan or search on metacpan
lib/Email/Outlook/Message.pm view on Meta::CPAN
sub _body_html_character_set {
my $self = shift;
my $body_encoding = $self->{BODY_HTML_ENCODING};
$self->_body_character_set($body_encoding)
}
sub _body_character_set {
my $self = shift;
my $body_encoding = shift;
my $codepage = $self->{CODEPAGE};
if (defined $body_encoding && $body_encoding eq "001F") {
return "UTF-8";
} elsif (defined $codepage) {
return $MAP_CODEPAGE->{$codepage} || "CP$codepage";
} else {
return 'CP1252';
}
}
sub _create_mime_plain_body {
my $self = shift;
my $charset = $self->_body_plain_character_set;
my $body_str = $self->{BODY_PLAIN};
if ($charset ne "UTF-8") {
# In this case, the body is a string of octets and needs to be decoded.
$body_str = Encode::decode($charset, $body_str);
}
return Email::MIME->create(
attributes => {
content_type => "text/plain",
charset => $charset,
disposition => "inline",
encoding => "8bit",
},
body_str => $body_str
);
}
sub _create_mime_html_body {
my $self = shift;
return Email::MIME->create(
attributes => {
content_type => "text/html",
charset => $self->_body_html_character_set,
disposition => "inline",
encoding => "8bit",
},
body => $self->{BODY_HTML}
);
}
# Implementation based on the information in
# http://www.freeutils.net/source/jtnef/rtfcompressed.jsp,
# and the implementation in tnef version 1.4.5.
my $MAGIC_COMPRESSED_RTF = 0x75465a4c;
my $MAGIC_UNCOMPRESSED_RTF = 0x414c454d;
my $BASE_BUFFER =
"{\\rtf1\\ansi\\mac\\deff0\\deftab720{\\fonttbl;}{\\f0\\fnil \\froman "
. "\\fswiss \\fmodern \\fscript \\fdecor MS Sans SerifSymbolArial"
. "Times New RomanCourier{\\colortbl\\red0\\green0\\blue0\n\r\\par "
. "\\pard\\plain\\f0\\fs20\\b\\i\\u\\tab\\tx";
sub _create_mime_rtf_body {
my $self = shift;
my $data = $self->{BODY_RTF};
my ($size, $rawsize, $magic, $crc) = unpack "V4", substr $data, 0, 16;
my $buffer;
if ($magic == $MAGIC_COMPRESSED_RTF) {
$buffer = $BASE_BUFFER;
my $output_length = length($buffer) + $rawsize;
my @flags;
my $in = 16;
while (length($buffer) < $output_length) {
if (@flags == 0) {
@flags = split "", unpack "b8", substr $data, $in++, 1;
}
my $flag = shift @flags;
if ($flag eq "0") {
$buffer .= substr $data, $in++, 1;
} else {
my ($a, $b) = unpack "C2", substr $data, $in, 2;
my $offset = ($a << 4) | ($b >> 4);
my $length = ($b & 0xf) + 2;
my $buflen = length $buffer;
my $longoffset = $buflen - ($buflen % 4096) + $offset;
if ($longoffset >= $buflen) { $longoffset -= 4096; }
while ($length > 0) {
$buffer .= substr $buffer, $longoffset, 1;
$length--;
$longoffset++;
}
$in += 2;
}
}
$buffer = substr $buffer, length $BASE_BUFFER;
} elsif ($magic == $MAGIC_UNCOMPRESSED_RTF) {
$buffer = substr $data, 16;
} else {
carp "Incorrect magic number in RTF body.\n";
}
return Email::MIME->create(
attributes => {
content_type => "application/rtf",
disposition => "inline",
encoding => "base64",
},
body => $buffer
);
}
# Copy original header data.
# Note: This should contain the Date: header.
sub _copy_header_data {
my ($self, $mime) = @_;
defined $self->{HEAD} or return;
( run in 1.883 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )