use Encode qw/find_encoding/;
use Encode::MIME::Header;
use Email::MIME::ContentType qw/parse_content_type/;
+use constant MAX_INLINE_QUOTED => 5;
+use constant MAX_TRUNC_LEN => 72;
my $enc_utf8 = find_encoding('utf8');
my $enc_ascii = find_encoding('us-ascii');
my ($enc, $part, $part_nr, $full_pfx) = @_;
my $n = 0;
my $s = ascii_html($enc->decode($part->body));
- $s =~ s!^((?:(?:>[^\n]+)\n)+)!
+ $s =~ s!^((?:(?:>[^\n]*)\n)+)!
my $cur = $1;
my @lines = split(/\n/, $cur);
- if (@lines > 1) {
+ if (@lines > MAX_INLINE_QUOTED) {
# show a short snippet of quoted text
$cur = join(' ', @lines);
- $cur =~ s/> ?//g;
+ $cur =~ s/^>\s*//;
my @sum = split(/\s+/, $cur);
$cur = '';
do {
- $cur .= shift(@sum) . ' ';
- } while (@sum && length($cur) < 68);
- $cur=~ s/ \z/ .../;
+ my $tmp = shift(@sum);
+ my $len = length($tmp) + length($cur);
+ if ($len > MAX_TRUNC_LEN) {
+ @sum = ();
+ } else {
+ $cur .= $tmp . ' ';
+ }
+ } while (@sum && length($cur) < MAX_TRUNC_LEN);
+ $cur =~ s/ \z/ .../;
"> <<a href=\"${full_pfx}#q${part_nr}_" . $n++ .
- "\">$cur<\/a>>";
+ "\">$cur<\/a>>\n";
} else {
$cur;
}
my ($enc, $part, $part_nr) = @_;
my $n = 0;
my $s = ascii_html($enc->decode($part->body));
- $s =~ s!^((?:(?:>[^\n]+)\n)+)!
+ $s =~ s!^((?:(?:>[^\n]*)\n)+)!
my $cur = $1;
my @lines = split(/\n/, $cur);
- if (@lines > 1) {
+ if (@lines > MAX_INLINE_QUOTED) {
"<a name=q${part_nr}_" . $n++ . ">$cur</a>";
} else {
$cur;
sub trim_message_id {
my ($mid) = @_;
- $mid = $enc_mime->decode($mid);
$mid =~ s/\A\s*<//;
$mid =~ s/>\s*\z//;
my $html = ascii_html($mid);
defined $v or next;
$v =~ tr/\n/ /s;
$v =~ tr/\r//d;
- $v = ascii_html($enc_mime->decode($v));
+ my $raw = $enc_mime->decode($v);
+ $v = ascii_html($raw);
$rv .= "$h: $v\n";
- if ($h eq "From" || $h eq "Subject") {
- push @title, $v;
+ if ($h eq 'From') {
+ my @from = Email::Address->parse($raw);
+ $raw = $from[0]->name;
+ unless (defined($raw) && length($raw)) {
+ $raw = '<' . $from[0]->address . '>';
+ }
+ $title[1] = ascii_html($raw);
+
+ } elsif ($h eq 'Subject') {
+ $title[0] = $v;
}
}
my $mid = $simple->header('Message-ID');
if (defined $mid) {
my ($html, $href) = trim_message_id($mid);
- $rv .= "Message-ID: <<a href=\"$href.html\">$html</a>> ";
+ $rv .= "Message-ID: <$html> ";
$rv .= "(<a href=\"$href.txt\">original</a>)\n";
}