Вопрос по скриптику на Perl

От: Чанов Андрей Дмитриевич <CGatePro_at_mx_ru>
Дата: Tue 18 Mar 2008 - 11:39:22 MSK


Подскажите как переписать кусочек чтобы тереть вначале старое правило Spam у акаунта или записать поверх старого новое. Или скриптик бы какой чтобы все правила потереть на всех доменах и всех акаунтах. Заранее спасибо тем, кто откликнется.

---
 

#!/usr/bin/perl -w

use CLI;

my $cli = new CGP::CLI( { PeerAddr => 'server.ru',

			PeerPort => 106,
			login    => 'postmaster',
			password => 'postmaster'
			} )
	|| die "Can't login to CGPro: ".$CGP::ERR_STRING."\n";

my $domList=$cli->ListDomains() || die "can't list domains";

foreach $domain (sort @$domList) {
  $AccountList = $cli->ListAccounts($domain)

                 || die "Error: ".$cli->getErrMessage.", quitting";
  foreach(keys %$AccountList) {
    $address = "$_\@$domain";
    print "$address\n";     

    my $Rules=$cli->GetAccountRules($address)

                    || die "Error: ".$cli->getErrMessage.", quitting";

    $foundrule = 0;

    foreach my $Rule (@$Rules) { if ($Rule->[1] eq 'Spam') {$foundrule = 1;} }     

    unless ($foundrule) {

      $filter_rule = ( [5,'Spam',[["Subject",'is',"*Spam*"]]
      			,[["Store in",'Spam'],["Discard"]]]
      		     );
  			
      @NewRules = (@$Rules, $filter_rule);
      print "  Creating Spam Filter Rule!\n";
      $cli->SetAccountRules($address,\@NewRules)
        || die "Error: ".$cli->getErrMessage.", quitting";
    }     

    my $Boxes= $cli->ListMailboxes(accountName=>$address)

         || die "Error: ".$cli->getErrMessage.", quitting";     

    $foundbox = 0;     

    foreach (sort keys %$Boxes) { if ($_ eq "Spam") { $foundbox = 1;} }     

    unless ($foundbox) {

    	print "  Creating Spam box\n";
    	$cli->CreateMailbox($address,'Spam') 
    		|| die "Error: ".$cli->getErrMessage.", quitting";
    }
  }
}

$cli->Logout;

---
Получено Tue Mar 18 08:39:41 2008

Этот архив был сгенерирован hypermail 2.1.8 : Tue 18 Mar 2008 - 12:14:18 MSK