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 )