LINUX.ORG.RU

Perl: помогите со скриптиком вытаскивания адресов


0

0

зачем это вообще нужно - вопрос сложный, но возникла необходимость из одной папки формата mbox вытащить все почтовые 
адреса отправителей, кроме одного домена (наш локальный рабочий. Скажем так mylocal.net). В папке находится спам, пришедьший года за три на 
порядка полсотни ящиков. Вручную малоприятное занятие. 


Сам в програмировании не очень силен. В итоге получилась такая вещь:

#!/usr/bin/perl

my $conf = "../etc/spamtest.conf";
             (^^^тут прописаны пути к трем следующим файлам)
my $spamtest_stop_log = undef();
my $spam_mailbox = undef();
my $spam_list = undef();

load_conf();

sub load_conf
{
open (CONF,"<$conf") || die "Cant open $conf\n";
    while (<CONF>)
        {
        chomp;
        ($option,$value) = split(/=/);
        $spamtest_stop_log = $value if $option eq "spamtest_stop_log";
        $spam_mailbox = $value if $option eq "spam_mailbox";
        $spam_list = $value if $option eq "spam_list";
        }
close CONF;
}
open SPAMLIST, ">>$spam_list";

open START, "$spamtest_stop_log";
$iii = <START>;
close START;

open LOG, "$spam_mailbox";
    for ($i = 1; $i <= $iii; ++$i)
       {
        $tmpsss = <LOG>;
       }

    foreach(<LOG>)
        {
        $iii+= 1;

    s/[<]/ /g;
    s/[>]/ /g;
    s/[:]/ /g;

{
next unless ($retpach) =
        m/(Return-Path)\s+(\w*)/g;


    s/Return-Path   //g;
    s/X-Return-Path  //g;

print "$_\n";
print SPAMLIST $_;
}
}
close SPAMLIST;
open STOP, ">$spamtest_stop_log";
print STOP $iii;
close STOP;

недостатками является то, что если кто-то нашей локалки пересылал на 
этот ящик пришедьший ему спам, то в Return-Path оказывается его 
почтовый ящик. теперь два вороса:

1. как сделать, чтоб адреса содержащие @mylocal.net не попадали в SPAMLIST 
(на крайняк - как потом уже из готового вырезать строки содержащие этот адрес)

2. мельком посмотрел результат и заметил что есть одинаковые адреса. 
Как сдалать так, чтоб одинаковые адреса в SPAMLIST печатались один раз
★★★

Ответ на: комментарий от deys

if( (!$_=~/mydomain\.net/) and  !exists($domainHash{$_})){
$domainHash{$_}=1;
print SPAMLIST $_;
}

WARNING: untested

phrm ★★
()
Ответ на: комментарий от kpanic

>2. cat spam_list_file | sort | uniq

sort -u spam_list_file

;-)

P.S. Я тоже хотел шелл предложить :)

php-coder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.