По просьбам телезрителей высылаю мое творение ;)

antispam.pl - собственно скрипт. Там надо поправить
имя сервера, логин, пароль и свой e-mail

enabled.txt - список адресов. Если у вас в ящике письма на эти
адреса, то они грохнуты не будут. Полезно для списков рассылки.

spamaddr.txt - моя база спамеров. Включает как отдельные
адреса так и целые домены. При сравнении From и сточки из
базы используется поиск подстроки со всеми вытекающими.
Поэтому если в строчка в базе .co.kr, а письмо пришло с адреса
[EMAIL PROTECTED], то оно будет почикано.

spamsubj.txt - для заголовков. Если в subj встретится подстрока,
которая есть в этом файле, то письмо также будет почикано.

Вниманию новичков! Программа требует модуль Perl'а
Net::POP3. С этим проблем быть не должно - есть оно в
Debian'e (не помню правда название пакета), то на всякий случай
предупреждаю.

Установка: все складывается в один каталог, в котором есть
права на запись (для создания лога). После этого
chmod +x ./antispam.pl и все готово к употреблению. ;)
Запускать в этом же каталоге ./antispam.pl

Программа довольно болтлива и будет докладывать буквально
о каждом своем шаге.

--
С уважением, Виктор

#!/usr/bin/perl

use Net::POP3;

$pop3_server = "mail.permonline.ru";
$pop3_user = "username";
$pop3_passwd = "password";
$my_email = "[EMAIL PROTECTED]";

$spamaddr_file = "./spamaddr.txt";
$spamsubj_file = "./spamsubj.txt";
$enabled_file = "./enabled.txt";

$reject_file = "./reject.log";

sub WriteHeader {
  my (@header) = @_;
  my $i;
  
  open(FO, ">>$reject_file");
  foreach $i (@header) {
    chomp($i);
    print FO "$i\n";
  }
  print FO "\n";
  close(FO);
}

sub SpamAddr {
  my ($line) = @_;
  my $i;

  foreach $i  (@spam_addr) {
    return -1 if (index($line, $i) != -1);
  }
  
  return 0;
}

sub SpamSubj {
  my ($line) = @_;
  my $i;

  foreach $i  (@spam_subj) {
    return -1 if (index($line, $i) != -1);
  }
  
  return 0;
}

sub CheckTo {
  my ($line) = @_;
  my $i;

  foreach $i  (@enabled_addr) {
    return 0 if (index($line, $i) != -1);
  }

  return -1 if (index(lc($line), lc($my_email)) == -1);
  return 0;
}

print "Loading spammer's addresses... ";
@spam_addr=();
open(F, $spamaddr_file);
while(<F>) {
  chomp();
  $s = $_;
  push(@spam_addr, $s) if (index($s, "#") != -1 || $s ne "");
}
close(F);
print "done\n";

print "Loading spam letter subjects... ";
@spam_subj=();
open(F, $spamsubj_file);
while(<F>) {
  chomp();
  $s = $_;
  push(@spam_subj, $s) if (index($s, "#") != -1 || $s ne "");
}
close(F);
print "done\n";

print "Loading enabled subjects... ";
@enabled_addr=();
open(F, $enabled_file);
while(<F>) {
  chomp();
  $s = $_;
  push(@enabled_addr, $s) if (index($s, "#") != -1 || $s ne "");
}
close(F);
print "done\n";

print "Connect to $pop3_server... ";
$pop = Net::POP3->new($pop3_server) or die "Can't open connection to 
$pop3_server: $!\n";
print "done\n";
print "Login as user $pop3_user... ";
$pop->login($pop3_user, $pop3_passwd) or die "Can't login to $pop3_server: 
$!\n";
print "done\n";

print "Loading list of messages... ";
$msgnums = $pop->list or die "Can't get list of undeleted messages :$!\n";
print "done\n";

$count = 0;

foreach $i (keys %$msgnums) {
  $flag = 0; $is_to = 0; $is_from = 0;
  $count++;
  print "Loading header message number $count... ";
  $header = $pop->top($i, 0);
  print "done\n";
  
  print "Analising header message number $count... ";
  foreach $line (@$header) {
    chomp($line);
    if (index(lc($line), "from:") == 0) {
      $is_from = 1;
      if (SpamAddr($line) == -1) {
        $flag = 2;
        next;
      }
    }

    if (index(lc($line), "subject:") == 0) {
      if (SpamSubj($line) == -1) {
        $flag = 3;
        next;
      }
    }

    if (index(lc($line), "to:") == 0) {
      $is_to = 1;
      $flag = 1 if CheckTo($line) == -1;
      next;
    }
    
    if (index(lc($line), "cc:") == 0) {
      $is_to = 1;
      $flag = 0 if CheckTo($line) == 0;
    }
  }
 
  $flag = 4 if ($is_to == 0);
  $flag = 5 if ($is_from == 0);
 
  if ($flag > 0) {
      print "deleted: not for me\n" if ($flag == 1);
      print "deleted: address in spammer's base\n" if ($flag == 2);
      print "deleted: subject in subject's base\n" if ($flag == 3);
      print "deleted: field \"To:\" is absent\n" if ($flag == 4);
      print "deleted: field \"From:\" is absent\n" if ($flag == 5);
      WriteHeader(@$header);
      $pop->delete($i);
  } else {
      print "done\n";
  }
}

$pop->quit();
[email protected]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
# http://ezhe.ru/ses/list.html
.co.kr
.com.br
.co.jp
language.com
@monteckorea.com
@imart.ac
@naroot.net
@footday.com
@inpastel.com
@webpromotion2.com
@driverzzang.com
@almangi.com
@hanbit.com
@baulmedia.com
@test2.com
@sina.com
@kbf.info
@ddddd.com
@dohewon.com
@albaclub.com
@dreamx.net
@ibclub.tv
@digitalschool.com
@lanitdv.ru
@netian.com
@pa18.com
@drcodi.com
@test.net
@wirelessteam.net
@sohomart.org
@bcline.com
@themail.com
@xxx.com
@yahoo.com.cn
@naver.com
@eudoramail.com
@rediffmail.com
@namail.net
@kornet.net
@com.ne.kr
@shaw.ca
@stc.net
@wowmail.com
@noryangjin.com
@hanmir.com
@51wlan.com
@hitel.net
@empal.com
@hitkorea.biz
[EMAIL PROTECTED]
@clickij.com
@263.net
@163.net
@163.com
@0.com
@ggg.com
@test.com
@1234.com
@aaaa.com
@emailresults.net
@korea.com
@hanmail.net
@hanmail.com
@hananet.net
@gmate.com
@dreamwiz.com
@ibcine.tv
@medical4989.com
@shinbiro.com
@chinaut.net
@trendware.com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
@bigmir.net
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
igold
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
@orgio.net
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED],com
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
oktel999
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
[EMAIL PROTECTED]
porno
sex
erotic
[LOVE]
(Xxx)
(XXX)
(xxx)
zoo
ZOO

Ответить