Don't know if this is of interest to others, but I've modified a script used
for reporting spam to Spamassassins sa-learn. The script was originally done by
Nick Burch for updating the Bayesian db by fetching mail for a public folders
on MS Exchange servers over IMAP. (http://tirian.magd.ox.ac.uk/~nick/code/)
However, I could not find any similar tools for reporting mail from IMAP
folders to the razor-report tool, so I just modified the existing script a bit
to call the razor-report tool. I have not tested this extensively, but it seems
to work ok.
Basically, what we do is that all users report spam not tagged by SA by moving
the original email into this SPAM folder. Then our mail server runs the
following script to fetch the emails from Public Folders and report them, in
this case to razor-report.
This version contains a lot of the old SA code which is not needed... the HAM
folder setting is not used, but it could be used to call razor-revoke..
Any input appreciated...
Regards,
Thomas Nilsen
----------------------- START OF SCRIPT -------------------------
#!/usr/bin/perl
# Imap Interface to razor-report v0.01
# ----------------------------- -----
#
# Connects to an imap server, and filters the messages from the INBOX
# and SpamTrap
#
# usage:
# razor-report.pl <-hamfolder HAM> <-spamfolder SPAM>
#
# Other options:
# -skips nnn skips over the first nnn messages in the folder(s)
# -deletespam after learning from a spam message, delete it
# -delete-spam (as above)
# -dangerous-delete-ham after learning from a ham (real email),
# delete it. Most people don't want this...
# -dangerous-delete-all after learning from any message, delete
# it, spam or ham
#
# Uses Mail::IMAPClient and Razor Agent (razor-report)
#
#
# Original code by Nick Burch <[EMAIL PROTECTED]>
# 25/06/2003
# Adopted for Razor by Thomas Nilsen
# 24/01/2005
use Mail::IMAPClient;
# Define our server and credentials here
# * Really ought to able to have several accounts defined
#
# ** fix me ** your details go below
my $username = 'user';
my $password = 'password';
my $server = 'imapserver';
# Define where to find messages
my $defspamfolder = 'Public Folders/Spam/SPAM-Test';
my $defhamfolder = 'Public Folders/Spam/NON_SPAM';
my $deletespam = 0;
my $deleteham = 0;
my $default = 1;
my $skips = 0;
my @spams;
my @hams;
while(my $arg = shift) {
if($arg eq "-spamfolder") {
my $spam = shift;
push @spams,$spam;
print "Using spam folder $spam\n";
$default = 0;
}
if($arg eq "-hamfolder") {
my $ham = shift;
push @hams,$ham;
print "Using normal (ham) folder $ham\n";
$default = 0;
}
if($arg eq "-deletespam" || $arg eq "-deletespams" || $arg eq "-delete-spam"
|| $arg eq "-delete-spams") {
$deletespam = 1;
}
if($arg eq "-dangerous-delete-ham" || $arg eq "-dangerous-delete-hams") {
$deleteham = 1;
}
if($arg eq "-dangerous-delete-all") {
$deletespam = 1;
$deleteham = 1;
}
if($arg eq "-skips" || $arg eq "-skip") {
$skips = shift;
}
if($arg eq "-?" || $arg eq "-h") {
print "Usage:\n";
print " imap-sa-learn.pl [-spamfolder f]* [-hamfolder f]*\n\n";
print "with no argumnets, uses default folders\n";
print "(a few other options exist, see the header of the program)\n";
exit;
}
}
if($default) {
push @hams,$defhamfolder;
push @spams,$defspamfolder;
}
my %folders;
$folders{'spam'} = [EMAIL PROTECTED];
#$folders{'ham'} = [EMAIL PROTECTED];
# Normal (1), Debugging (2), or silent(0)?
# Connect to the IMAP server in peek (i.e. don't set read flag) mode
my $imap = Mail::IMAPClient->new(Server => $server,
User => $username,
Password => $password,
Peek => 1);
foreach my $type(keys %folders) {
foreach my $folder (@{$folders{$type}}) {
print "\nLooking in $type folder $folder\n";
# Pick the folder
$imap->select($folder);
# Enable peek mode
$imap->Peek(1);
# Fetch messages
my @mails = ($imap->seen(),$imap->unseen);
my $count = 0;
foreach my $id (@mails) {
$count++;
if($count < $skips) { next; }
print " Learning on $type message $id\n";
my $mail = $imap->message_string($id);
open SA, "| razor-report";
print SA $mail;
close SA;
if($type eq "spam" && $deletespam) {
# If you want to move the message rather than deleting it,
# uncomment the line below, change the folder, but _don't_
# remove the delete line!
#$imap->append('TrashBin', $mail );
print "Deleting Spam Message $id\n";
$imap->delete_message($id);
}
if($type eq "ham" && $deleteham) {
print "Deleting Ham (normal email) Message $id\n";
$imap->delete_message($id);
}
}
if($deleteham || $deletespam) {
# Only expunge now, rather than on every message
$imap->expunge();
}
}
}
$imap->close;
exit;
DISCLAIMER:
This message contains information that may be privileged or confidential and is
the property of the Roxar Group. It is intended only for the person to whom it
is addressed. If you are not the intended recipient, you are not authorised to
read, print, retain, copy, disseminate, distribute, or use this message or any
part thereof. If you receive this message in error, please notify the sender
immediately and delete all copies of this message.
-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
Razor-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/razor-users