Documentation/public-inbox-config.pod | 3 ++- lib/PublicInbox/WatchMaildir.pm | 22 +++++++++++++--------- diff --git a/Documentation/public-inbox-config.pod b/Documentation/public-inbox-config.pod index cfd6c93d1dbaa51c0dc7bb98e21cf33dcd119a24..78f12ba2910302bac162701c968a82524677e22b 100644 --- a/Documentation/public-inbox-config.pod +++ b/Documentation/public-inbox-config.pod @@ -105,7 +105,8 @@ This may be set to C to enable the use of SpamAssassin L for filtering spam before it is imported into git history. Other spam filtering backends may be supported in -the future. This only affects L. +the future. This requires L, but affects +all configured public-inboxes in PI_CONFIG. Default: none diff --git a/lib/PublicInbox/WatchMaildir.pm b/lib/PublicInbox/WatchMaildir.pm index c8ea3ed3d2613e18f796f23126a0a2709c97a7dc..b7c2d17a8fb7937694fc56fc8c5e6bb1470ffc59 100644 --- a/lib/PublicInbox/WatchMaildir.pm +++ b/lib/PublicInbox/WatchMaildir.pm @@ -80,6 +80,7 @@ spamcheck => $spamcheck, mdmap => \%mdmap, mdir => \@mdir, mdre => $mdre, + config => $config, importers => {}, }, $class; } @@ -99,15 +100,18 @@ my ($self, $path) = @_; $path =~ /:2,[A-R]*S[T-Z]*\z/i or return; my $mime = _path_to_mime($path) or return; _force_mid($mime); - foreach my $inbox (values %{$self->{mdmap}}) { - next unless ref $inbox; - my $im = _importer_for($self, $inbox); - $im->remove($mime); - if (my $scrub = _scrubber_for($inbox)) { - my $scrubbed = $scrub->scrub($mime) or next; - $im->remove($scrubbed); - } - } + $self->{config}->each_inbox(sub { + my ($ibx) = @_; + eval { + my $im = _importer_for($self, $ibx); + $im->remove($mime); + if (my $scrub = _scrubber_for($ibx)) { + my $scrubbed = $scrub->scrub($mime) or return; + $im->remove($scrubbed); + } + }; + warn "error removing spam at $path from $ibx->{name}\n" if $@; + }) } # used to hash the relevant portions of a message when there are conflicts