系统管理工具包: 过滤电子邮件中的垃圾邮件和病毒
2008-11-11 08:28:08 来源:WEB开发网为了实现这个功能,您需要设置一个邮件文件夹或者系统,用户可以在其中发送他们的电子邮件,以便对电子邮件进行扫描,并且 Bayesian 过滤器可以“判断”电子邮件是否为垃圾邮件(系统判断为“真实”的垃圾邮件)或者非垃圾邮件(系统判断为“垃圾邮件”的真实电子邮件)。
通常,比较简单的做法是设置一个单独的邮箱,以便使用一个邮箱来保存垃圾邮件,而使用另一个邮箱来保存非垃圾邮件。在支持用户之间相互学习的系统中,您可以在每个邮箱中为用户设置相应的文件夹。在本文所给出的几个示例中,假定您正在使用基于 SpamAssassin 和 IMAP 的邮件系统,这样一来,您可以读取并解析邮件内容,并且允许使用 SpamAssassin 学习其中的细节信息,但这些原则可以很容易地应用于其他的垃圾邮件过滤环境。
清单 1 显示了一个简单 Perl 脚本,它可以访问全局邮箱、下载每个消息、然后向 spamassassin 和 Razor 报告其中的内容。
清单 1. 用于报告和学习垃圾邮件的脚本
#! /usr/bin/perl
$SpamFolder = "INBOX";
$Server = 'imap.mcslp.pri';
$User = 'spam';
$Password = 'ilovespam';
use Mail::IMAPClient;
# Open the connection to the mail server
my $SPAMIMAP = Mail::IMAPClient -> new (Server => $Server,
User => $User,
Password => $Password);
if (!defined($SPAMIMAP))
{
print "Error: $@n";
}
# Select the Spam Folder
$SPAMIMAP->select($SpamFolder);
# Get a list of Message IDs
my @MIDs = $SPAMIMAP->messages();
# Exit if there aren't any messages to process
if (scalar(@MIDs) == 0)
{
exit(0);
}
# Create a temporary directory to hold our message text
mkdir '/tmp/spamreport',0000;
# Process each ID
foreach $MID (@MIDs)
{
# Get the message text, and write the text out to
# test file
my $path = "/tmp/spamreport/$MID";
my $msgtext = $SPAMIMAP -> message_string($MID);
open(FILE,">$path");
print FILE $msgtext;
close(FILE);
# Run the SpamAssassin learn script on the file
system("cat $path|sa-learn --spam");
# Run the Razor reporter on the message content
system("cat $path|razor-report");
# Delete the original message
$SPAMIMAP->delete_message($MID);
# Delete the temporary file
unlink($path);
}
# Empty the trash and disconnect
$SPAMIMAP->expunge();
$SPAMIMAP->disconnect();
更多精彩
赞助商链接