- $title[0] ||= '(no subject)';
- $ctx->{-title_html} = join(' - ', @title);
- $rv .= 'Message-ID: <' . $mid->as_html . '> ';
- $rv .= "(<a\nhref=\"raw\">raw</a>)\n";
- $rv .= _parent_headers($hdr, $srch);
+ foreach my $h (qw(To Cc)) {
+ for my $v ($eml->header($h)) {
+ fold_addresses($v);
+ $v = ascii_html($v);
+ obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx;
+ $rv .= "$h: $v\n" if $v ne '';
+ }
+ }
+ my @subj = $eml->header('Subject');
+ if (@subj) {
+ my $v = ascii_html(shift @subj);
+ obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx;
+ $rv .= 'Subject: ';
+ $rv .= $over ? qq(<a\nhref="#r"\nid=t>$v</a>\n) : "$v\n";
+ $title[0] = $v;
+ for $v (@subj) { # multi-Subject message :<
+ $v = ascii_html($v);
+ obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx;
+ $rv .= "Subject: $v\n";
+ }
+ } else { # dummy anchor for thread skeleton at bottom of page
+ $rv .= qq(<a\nhref="#r"\nid=t></a>) if $over;
+ $title[0] = '(no subject)';
+ }
+ for my $v ($eml->header('Date')) {
+ $v = ascii_html($v);
+ obfuscate_addrs($obfs_ibx, $v) if $obfs_ibx; # possible :P
+ $rv .= "Date: $v\n";
+ }
+ if (!$nr) { # first (and only) message, common case
+ $ctx->{-title_html} = join(' - ', @title);
+ $rv = $ctx->html_top . $rv;
+ }
+ if (scalar(@$mids) == 1) { # common case
+ my $mhtml = ascii_html($mids->[0]);
+ $rv .= "Message-ID: <$mhtml> ";
+ $rv .= "(<a\nhref=\"raw\">raw</a>)\n";
+ } else {
+ # X-Alt-Message-ID can happen if a message is injected from
+ # public-inbox-nntpd because of multiple Message-ID headers.
+ my $lnk = PublicInbox::Linkify->new;
+ my $s = '';
+ for my $h (qw(Message-ID X-Alt-Message-ID)) {
+ $s .= "$h: $_\n" for ($eml->header_raw($h));
+ }
+ $lnk->linkify_mids('..', \$s, 1);
+ $rv .= $s;
+ }
+ $rv .= _parent_headers($eml, $over);