MHonArc
view release on metacpan or search on metacpan
contrib/mhn2mbox.pl view on Meta::CPAN
my @array = ();
if (!open(MSGFILE, $filename)) {
warn qq/Warning: Unable to open "$filename": $!\n/;
return 0;
}
my $href = parse_data(\*MSGFILE);
close(MSGFILE);
my $date = $href->{'date'}[0];
# $day[$wday].', '.$d2[$mday].' '.$month[$mon].' '.($year+1900).' '.$d2[$hour].':'.$d2[$min].':'.$d2[$sec].' GMT';
## Determine date of message
if (($date =~ /\S/) && (@array = mhonarc::parse_date($date))) {
$index = mhonarc::get_time_from_date(@array[1 .. $#array]);
} else {
$index = time;
$date = mhonarc::time2str("", $index, 1) unless $date =~ /\S/;
}
if (defined($href->{'from-r13'})) {
$from_addr = mhonarc::mrot13($href->{'from-r13'}[0]);
$email_addr = &extract_email_address($from_addr);
#$email_addr = mhonarc::extract_email_address($from_addr);
print MBOXFILE "From $email_addr $date\n";
print MBOXFILE "From: $from_addr\n";
} elsif (defined($href->{'from'})) {
$from_addr = $href->{'from'}[0];
$email_addr = &extract_email_address($from_addr);
#$email_addr = mhonarc::extract_email_address($from_addr);
print MBOXFILE "From $email_addr $date\n";
print MBOXFILE "From: $from_addr\n";
} else {
print STDERR "WARNING: From Anonymous\n" if $debug;
$from_addr = 'Anonymous';
$email_addr = mhonarc::extract_email_address($from_addr);
print MBOXFILE "From $email_addr $date\n";
print MBOXFILE "From: $from_addr\n";
}
print MBOXFILE "Date: $date\n";
if (defined($href->{'msgtoheader'})) {
print MBOXFILE "To: $href->{'msgtoheader'}[0]\n";
}
if (defined($href->{'subject'})) {
print MBOXFILE "Subject: $href->{'subject'}[0]\n";
}
if (defined($href->{'reference'})) {
print MBOXFILE "In-Reply-To: <$href->{'reference'}[0]>\n";
}
if (defined($href->{'message-id'})) {
print MBOXFILE "Message-ID: <$href->{'message-id'}[0]>\n";
}
print MBOXFILE "MIME-Version: 1.0\n";
if (defined($href->{'content-type'})) {
$contype = $href->{'content-type'}[0];
} elsif (defined($href->{'contenttype'})) { # older versions
$contype = $href->{'contenttype'}[0];
}
if (defined($href->{'msgbodytext'})) {
push(@bodytext, @{$href->{'msgbodytext'}});
}
if ($contype =~ /multipart/i) {
$boundary = join("", $$, '.', time, '.', $contype);
if (defined($href->{'derived'})) {
print MBOXFILE
"Content-Type: $contype; boundary=\"Boundary..$boundary\"\n";
push(@Derived, @{$href->{'derived'}});
print STDERR "Attachments: ", join(',', @Derived), "\n" if $debug;
pop(@bodytext);
foreach $binfile (reverse @Derived) {
$description = pop(@bodytext);
$docname = $binfile;
$addendum .= "\n--Boundary..$boundary\n";
$addendum .=
"Content-Type: application\/octet-stream\; name=\"$docname\"\n";
$addendum .= "Content-Transfer-Encoding: base64\n";
$addendum .=
"Content-Disposition: attachment\; filename=\"$docname\"\n";
$addendum .= "Content-Description: \"$description\"\n\n";
$addendum .= join("", mime_encode("$HTML_DIR/$binfile"));
}
print MBOXFILE "\n--Boundary..$boundary\n";
print MBOXFILE "Content-Type: text/plain\n";
print MBOXFILE "Content-Transfer-Encoding: 7bit\n";
print MBOXFILE join("\n", @bodytext);
print MBOXFILE "\n";
print MBOXFILE "$addendum";
print MBOXFILE "--Boundary..$boundary--\n\n";
} else {
print MBOXFILE "Content-Type: text\/plain\n";
print MBOXFILE join("\n", @bodytext);
}
} else {
print MBOXFILE "Content-Type: $contype\n\n";
print MBOXFILE join("\n", @bodytext);
}
}
##---------------------------------------------------------------------------##
## parse_data(): Function to parse the initial comment
## declarations of a MHonArc message file into a hash. A refernce
## to resulting hash is returned. Keys are the field names, and
## values are arrays of field values. Adapted from mhmsgfile.pl
##
( run in 0.968 second using v1.01-cache-2.11-cpan-524268b4103 )