Plagger::Plugin::SmartFeed::SpamAssassin

これもまた例によってAcme風味。もうちょいあれこれ(spamdとか)設定できるようにしようとも思ったのですが、めんどくさくなったので初期設定のみ。まあ、きっちり設定ファイル食わせてやればそれなりには使えそうですが、ヘッダ部分の判定なしでどこまでSPAM認定できるかはかなり謎ですな。update.feed.fixupとかupdate.fixupあたりにフックさせてもよかったのかもしれませんし、丁寧につくるならfeed_initのところでSAを起動して、feed_entryで判定、feed_finalizeで後始末かなとも思いましたが、さてはて。

package Plagger::Plugin::SmartFeed::SpamAssassin;
use strict;
use base qw( Plagger::Plugin::SmartFeed::All );

use Mail::SpamAssassin;

sub feed_finalize {
    my($self, $context, $args) = @_;

    $self->SUPER::feed_finalize($context, $args);

    my $test = Mail::SpamAssassin->new($self->conf->{new});

    for my $entry ($self->{feed}->entries) {
        my $status = $test->check_message_text(
            join "\n", 'Subject: ' . $entry->title, "\n", $entry->body
        );

        if ($status->is_spam) {
            $entry->title( '[SPAM] ' . $entry->title);
            $entry->body($entry->body . $status->get_report);
        }

        $status->finish;
    }
}

1;

__END__

=head1 NAME

Plagger::Plugin::SmartFeed::SpamAssassin - mark spams

=head1 SYNOPSIS

  - module: SmartFeed::SpamAssassin
    config:
      new:
        local_tests_only: 1
        config_text:
          - score MISSING_SUBJECT 0.0
          - score MISSING_HB_SEP  0.0
          - score MISSING_HEADERS 0.0
          - score EMPTY_MESSAGE   0.0
          - score NO_RELAYS       0.0
          - score NO_RECEIVED     0.0
          - score TO_CC_NONE      0.0

=head1 CONFIG

=over 4

=item new

Options passed to Mail::SpamAssassin->new(). See L<Mail::SpamAssassin>
for details.

=back

=head1 AUTHOR

Kenichi Ishigaki

=head1 SEE ALSO

L<Plagger>, L<Plagger::Plugin::SmartFeed::All>, L<Mail::SpamAssassin>

=cut