+sub _remove_spam {
+ 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);
+ }
+ }
+}
+
+# used to hash the relevant portions of a message when there are conflicts
+sub _hash_mime2 {
+ my ($mime) = @_;
+ require Digest::SHA;
+ my $dig = Digest::SHA->new('SHA-1');
+ $dig->add($mime->header_obj->header_raw('Subject'));
+ $dig->add($mime->body_raw);
+ $dig->hexdigest;
+}
+
+sub _force_mid {
+ my ($mime) = @_;
+ # probably a bad idea, but we inject a Message-Id if
+ # one is missing, here..
+ my $mid = $mime->header_obj->header_raw('Message-Id');
+ if (!defined $mid || $mid =~ /\A\s*\z/) {
+ $mid = '<' . _hash_mime2($mime) . '@generated>';
+ $mime->header_set('Message-Id', $mid);
+ }
+}
+