91 lines
2.0 KiB
Perl
Executable File
91 lines
2.0 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
# SPDX-License-Identifier: MIT
|
|
#
|
|
# written by Jan Engelhardt, 2007-2008
|
|
|
|
use Getopt::Long;
|
|
use strict;
|
|
my $itable;
|
|
|
|
foreach my $file (@ARGV) {
|
|
if (!open(MBOX, "< $file")) {
|
|
print STDERR "Could not open $file: $!\n";
|
|
next;
|
|
}
|
|
|
|
my @data = split(/(?<=\n\n)(?=From)/s, join("", <MBOX>));
|
|
close MBOX;
|
|
|
|
my $folder = ".$file.split-up";
|
|
system "rm", "-Rf", $folder;
|
|
mkdir $folder;
|
|
|
|
open(FRAME, "> $file.html");
|
|
print FRAME "<html><frameset rows=\"*,*\"><frame src=\"$folder/idx.php\"><frame name=\"view\"></frameset>";
|
|
close FRAME;
|
|
|
|
open(INDEX, "> $folder/idx.php");
|
|
print INDEX <<"--EOT";
|
|
<html>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
<style type="text/css">
|
|
np,td{font-size:8pt;}
|
|
</style><body>
|
|
<table border=1>
|
|
<tr><th>#</th><th>From</th><th>To</th><th>Subject</th><th>Date</th></tr>
|
|
--EOT
|
|
|
|
my $i = 0;
|
|
foreach $_ (@data) {
|
|
my($from) = ($data[$i] =~ /^From:\s*(.*)/mi);
|
|
my($to) = ($data[$i] =~ /^To:\s*(.*)/mi);
|
|
my($subj) = ($data[$i] =~ /^Subject:\s*(.*)/mi);
|
|
my($date) = ($data[$i] =~ /^Date:\s*(.*)/mi);
|
|
my($from_addr) = ($from =~ /([\w\-_\.]+@[\w\-_\.]+)/mi);
|
|
my($to_addr) = ($to =~ /([\w\-_\.]+@[\w\-_\.]+)/mi);
|
|
$from =~ s/<.*?>//g;
|
|
$from = &dequote(&htmlize($from));
|
|
$to =~ s/<.*?>//g;
|
|
$to = &dequote(&htmlize($to));
|
|
$subj = &dequote(&htmlize($subj));
|
|
|
|
open(OUT, sprintf("> $folder/%06d.txt", $i));
|
|
print OUT $data[$i];
|
|
close OUT;
|
|
|
|
$itable = sprintf("<tr><td>%d</td><td><a href=\"mailto:%s\">".
|
|
"%s</td><td><a href=\"mailto:%s\">%s</a></td><td>".
|
|
"<a href=\"%06d.txt\" target=\"view\">%s</a></td>".
|
|
"<td>%s</td>\n",
|
|
$i, $from_addr, $from, $to_addr, $to, $i, $subj,
|
|
$date).
|
|
$itable;
|
|
++$i;
|
|
}
|
|
|
|
print INDEX <<"--EOT";
|
|
$itable
|
|
</table></body></html>
|
|
--EOT
|
|
close INDEX;
|
|
}
|
|
|
|
sub htmlize ()
|
|
{
|
|
my $a = shift @_;
|
|
$a =~ s/&/&/g;
|
|
$a =~ s/</</g;
|
|
$a =~ s/>/>/g;
|
|
return $a;
|
|
}
|
|
|
|
sub dequote ()
|
|
{
|
|
my $a = shift @_;
|
|
if ($a =~ s/=\?ISO.*?\?Q\?//) {
|
|
$a =~ s/=(..)/pack("H*", $1)/egi;
|
|
$a =~ s/\?=//g;
|
|
}
|
|
return $a;
|
|
}
|