my $recipient = $ENV{ORIGINAL_RECIPIENT};
defined $recipient or die "ORIGINAL_RECIPIENT not defined in ENV\n";
-my $dst = $config->lookup($recipient);
+my $dst = $config->lookup($recipient); # first check
defined $dst or exit(1);
my $main_repo = $dst->{mainrepo} or exit(1);
my $filtered; # string dest
-if (PublicInbox::MDA->precheck($filter, $recipient) &&
+if (PublicInbox::MDA->precheck($filter, $dst->{address}) &&
do_spamc($filter->simple, \$filtered)) {
# update our message with SA headers (in case our filter rejects it)
- my $msg = Email::Simple->new($filtered);
+ my $msg = Email::MIME->new(\$filtered);
$filtered = undef;
$filter->simple($msg);
- if (PublicInbox::Filter->run($msg)) {
+ if (PublicInbox::Filter->run($msg, $filter)) {
# run spamc again on the HTML-free message
if (do_spamc($msg, \$filtered)) {
- $msg = Email::MIME->new($filtered);
+ $msg = Email::MIME->new(\$filtered);
PublicInbox::MDA->set_list_headers($msg, $dst);
$filter->simple($msg);
$filter->pipe(PublicInbox::MDA->cmd, $main_repo);
}
}
+} else {
+ # Ensure emergency spam gets spamassassin headers.
+ # This makes it easier to prioritize obvious spam from less obvious
+ if (defined($filtered) && length($filtered)) {
+ my $drop = Email::MIME->new(\$filtered);
+ $filtered = undef;
+ $filter->simple($drop);
+ }
}
exit 0; # goes to emergency