+# single pass linkification of <Message-ID@example.com> within $str
+# with $pfx being the URL prefix
+sub linkify_mids {
+ my ($self, $pfx, $str, $raw) = @_;
+ $$str =~ s!$MID_EXTRACT!
+ my $mid = $1;
+ my $html = ascii_html($mid);
+ my $href = mid_href($mid);
+
+ # salt this, as this could be exploited to show
+ # links in the HTML which don't show up in the raw mail.
+ my $key = sha1_hex($html . $SALT);
+ $key =~ tr/0-9/A-J/;
+ my $repl = qq(<<a\nhref="$pfx/$href/">$html</a>>);
+ $repl .= qq{ (<a\nhref="$pfx/$href/raw">raw</a>)} if $raw;
+ $self->{$key} = $repl;
+ 'LINKIFY'.$key;
+ !ge;
+ $$str = ascii_html($$str);
+ $$str =~ s!\bLINKIFY([a-fA-J]{40})\b!
+ my $key = $1;
+ my $repl = $_[0]->{$key};
+ if (defined $repl) {
+ $repl;
+ } else { # false positive or somebody tried to mess with us
+ 'LINKIFY'.$key;
+ }
+ !ge;
+}
+
+sub to_html { linkify_2($_[0], ascii_html(linkify_1(@_))) }
+