Спам листы

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