зачем это вообще нужно - вопрос сложный, но возникла необходимость из одной папки формата 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 печатались один раз