1 |
douglas |
811 |
#!/usr/bin/perl |
2 |
|
|
# False Positive |
3 |
|
|
# |
4 |
|
|
# Douglas Thrift |
5 |
|
|
# |
6 |
|
|
# $Id$ |
7 |
|
|
|
8 |
|
|
use strict; |
9 |
|
|
use warnings; |
10 |
|
|
|
11 |
douglas |
924 |
use IMAP::Client; |
12 |
douglas |
811 |
use Mail::SpamAssassin; |
13 |
douglas |
925 |
use MIME::Base64; |
14 |
douglas |
811 |
|
15 |
douglas |
829 |
my $debug = 0; |
16 |
douglas |
811 |
|
17 |
douglas |
829 |
for my $arg (@ARGV) |
18 |
douglas |
811 |
{ |
19 |
douglas |
829 |
if ($arg eq "-debug") |
20 |
|
|
{ |
21 |
|
|
$debug = 1; |
22 |
|
|
} |
23 |
|
|
else |
24 |
|
|
{ |
25 |
|
|
print "Usage: $0 [-debug]\n"; |
26 |
|
|
|
27 |
|
|
exit 1; |
28 |
|
|
} |
29 |
douglas |
811 |
} |
30 |
|
|
|
31 |
douglas |
924 |
my $imap = new IMAP::Client; |
32 |
douglas |
811 |
|
33 |
douglas |
924 |
$imap->onfail('ABORT'); |
34 |
|
|
$imap->debuglevel(1) if ($debug); |
35 |
|
|
$imap->capability_checking(1); |
36 |
|
|
$imap->connect(PeerAddr => 'mail.douglasthrift.net', ConnectMethod => 'STARTTLS'); |
37 |
douglas |
829 |
|
38 |
douglas |
912 |
{ |
39 |
|
|
my $user = getpwuid $<; |
40 |
|
|
|
41 |
douglas |
925 |
open PASS, "$ENV{HOME}/.SpamUpdate.pass" or die "$0: $!\n"; |
42 |
douglas |
912 |
|
43 |
|
|
my $pass = <PASS>; |
44 |
|
|
|
45 |
|
|
chomp $pass; |
46 |
|
|
close PASS; |
47 |
|
|
|
48 |
douglas |
925 |
$pass =~ tr/A-Za-z/N-ZA-Mn-za-m/; |
49 |
|
|
|
50 |
|
|
$imap->authenticate($user, decode_base64($pass)); |
51 |
douglas |
912 |
} |
52 |
|
|
|
53 |
douglas |
924 |
$imap->select('Spam.False Positive'); |
54 |
|
|
|
55 |
|
|
my $messages = $imap->uidsearch('UNFLAGGED'); |
56 |
|
|
|
57 |
|
|
if (defined $messages) |
58 |
douglas |
829 |
{ |
59 |
douglas |
924 |
my $assassin = Mail::SpamAssassin->new($debug ? {debug => 'all'} : {}); |
60 |
|
|
my %fetch = $imap->uidfetch($messages, {}, 'INTERNALDATE'); |
61 |
douglas |
829 |
|
62 |
douglas |
924 |
for my $message (values %fetch) |
63 |
douglas |
829 |
{ |
64 |
douglas |
924 |
$imap->append('INBOX', $assassin->remove_spamassassin_markup($assassin->parse($message->{BODY}->{BODY})), '"' . $message->{INTERNALDATE} . '"'); |
65 |
|
|
$imap->uidstore($message->{UID}, '+FLAGS.SILENT', '\Flagged'); |
66 |
douglas |
829 |
} |
67 |
|
|
} |
68 |
|
|
|
69 |
douglas |
924 |
$imap->logout; |