ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FreeBSDAdmin/Mail/FalsePositive.pl
Revision: 1135
Committed: 2009-01-09T22:05:37-08:00 (16 years, 5 months ago) by douglas
Content type: text/x-perl
File size: 1426 byte(s)
Log Message:
Switch to a different IMAP client API, grr!

File Contents

# User Rev Content
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 1135 use IO::Socket::SSL;
12     use Mail::IMAPClient;
13 douglas 811 use Mail::SpamAssassin;
14 douglas 925 use MIME::Base64;
15 douglas 811
16 douglas 829 my $debug = 0;
17 douglas 811
18 douglas 829 for my $arg (@ARGV)
19 douglas 811 {
20 douglas 829 if ($arg eq "-debug")
21     {
22     $debug = 1;
23     }
24     else
25     {
26     print "Usage: $0 [-debug]\n";
27    
28     exit 1;
29     }
30 douglas 811 }
31    
32 douglas 1135 my $socket = new IO::Socket::SSL(Proto => 'tcp', PeerAddr => 'mail.douglasthrift.net', PeerPort => 993) or die "$0: $@\n";
33     my $imap = new Mail::IMAPClient(Debug => $debug, Socket => $socket);
34 douglas 811
35 douglas 912 {
36     my $user = getpwuid $<;
37    
38 douglas 925 open PASS, "$ENV{HOME}/.SpamUpdate.pass" or die "$0: $!\n";
39 douglas 912
40     my $pass = <PASS>;
41    
42     chomp $pass;
43     close PASS;
44    
45 douglas 925 $pass =~ tr/A-Za-z/N-ZA-Mn-za-m/;
46    
47 douglas 1135 $imap->User($user);
48     $imap->Password(decode_base64($pass));
49 douglas 912 }
50    
51 douglas 1135 sub error
52     {
53     die "$0: " . $imap->LastError;
54     }
55 douglas 924
56 douglas 1135 $imap->login or error;
57     $imap->select('Spam.False Positive') or error;
58 douglas 924
59 douglas 1135 my @messages = $imap->search('UNFLAGGED');
60    
61     error if ($@);
62    
63     if ($#messages != -1)
64 douglas 829 {
65 douglas 1135 my $assassin = new Mail::SpamAssassin($debug ? {debug => 'all'} : {});
66 douglas 829
67 douglas 1135 for my $message (@messages)
68 douglas 829 {
69 douglas 1135 my @result = $imap->fetch($message, '(INTERNALDATE BODY[])') or error;
70    
71     die "$0: no message $message\n" if ($result[0] !~ /UID $message/);
72    
73     $result[0] =~ /INTERNALDATE "([^"]+)"/;
74    
75     $imap->append_string('INBOX', $assassin->remove_spamassassin_markup($assassin->parse($result[1])), undef, $1) or error;
76     $imap->mark($message) or error;
77 douglas 829 }
78     }
79    
80 douglas 1135 $imap->logout or error;

Properties

Name Value
svn:executable *
svn:keywords Id