|

Спам листы
Xakep, номер #022, стр. 022-044-2
while ($param=<PARAM>){ # Считываем строку
chomp ($param); # Удаляем символ переноса корретки
($l,$r)=split (/=/,$param); # Разделяем информацию по знаку =
$data{$l}=$r; # Записываем полученные данные в хеш %data
}
close (PARAM); # Закрываем файл с конфигом
# Считывание базы
######################
opendir (DIR, $data{dir}); # Открываем директорию с HTML файлами
while ($name=readdir(DIR)){ # Считываем находящиеся в ней файлы
if (($name ne '.') && ($name ne '..')){ # Если это не переход к более высокому
# уровню каталога, то это HTML файл
open (FILEIN, $data{dir}.$name); # Открываем этот HTML файл
while ($string=<FILEIN>){ # Считываем строку
do { # Задаем цикл
$string=~s/<a href=[\"\']?mailto:([a-zA-Z0-9.@]+)[\"\']?>//i;
# Вот! Это самая главная строка программы
# Именно она проверяет строку HTML кода на наличие тега <A>
# И если в ней находится адрес электронной почты, то мы помещаем ее
# Во временную переменную $1
$find=$1; # Присваиваем это значение переменной $find
push (@data, $find."\n") if ($find ne ""); # Если $find не равен пустой строке, то
# добавляем полученный e-mail в массив @data
} while ($find ne "");
}
close (FILEIN); # Закрываем HTML файл
}}
closedir(DIR); # Закрываем директорию
# Записываем полученную информацию
###############################################
open (FILEOUT,">>".$data{base}.$data{filebase}); # Отрываем файл с базой
print FILEOUT @data; # Пишем в нее всю полученную информацию
close (FILEOUT); # Закрываем файл с базой mail адресов
if ($data{show}==1){ # Надо ли выводить полученную информацию на экран
print ">> Найденные e-mail'ы\n";
print @data; # Найденные e-mail'ы
print ">> Done!\n";
}
Код, как обычно, получился небольшой, но программа не будет уступать по своим характеристикам другим тулзам, так что опять можно похвастаться, какие мы продвинутые и пользуемся только своими наработками =). Теперь создай файл mailcut.cfg, вот что в нем будет по умолчанию:
dir=data/
base=base/
filebase=mail.txt
show=1
Как ты успел заметить, в конфигураторе есть параметр show, это просто дополнительная функция, которая выводит на экран информацию о найденных mail'ах, ее можно отключить, поставив значение 0, а если тебе вообще не надо, то удали весь код, который за это отвечает.
Все вроде бы круто, но есть одна проблема, велика вероятность, что у тебя будут повторяться e-mail'ы. А теперь представь себе: собрал ты спам лист, делаешь рассылку, а некоторые получают твое письмо по несколько раз. Спам и так неприятно получать, а по несколько раз вообще подстава. Придется написать чекер, который будет выбрасывать повторяющиеся e-mail'ы. Обзовем нашу программу check.pl, вот ее код:
#!/usr/bin/perl
# Параметры
##################
open (PARAM, "mailcut.cfg"); # Открываем файл с конфигом
while ($param=<PARAM>){ # Считываем строку
chomp ($param); # Удаляем символ переноса корретки
($l,$r)=split (/=/,$param); # Разделяем информацию по знаку =
$data{$l}=$r; # Записываем полученные данные в хеш %data
}
close (PARAM); # Закрываем файл с конфигом
open (MAIL, $data{base}.$data{filebase}); # Открываем файл с базой
Назад на стр. 022-044-1 Содержание Вперед на стр. 022-044-3
|