Главная Tuesday, March 28 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
лента новостей сайта microsin.ru лента новостей
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:
Кто он-лайн
Сейчас на сайте:
Гостей - 14
Модуль рекламы
Поисковые системы

Perl: чистка почтового ящика по протоколу POP3 Версия для печати
Написал microsin   
20.06.2009

Иногда нужно автоматом удалять письма из почтовых ящиков, куда сыплется заведомый спам. Например, это могут быть ящики, куда кладется письмо при ненайденном адресате, или общеизвестные для спамеров имена как postmaster (например, postmaster@mydomain.ru). В этой статье описывается скрипт, чистящий почтовые ящики.

[Тело скрипта - файл mailbox-clean.pl]
#!/usr/bin/perl
use Net::POP3;
usage(0) if "-h" eq $ARGV[0] || "-help" eq $ARGV[0];
usage(1) if 2 != $#ARGV;

($hostname, $account, $password) = @ARGV;
$handle = Net::POP3->new($hostname) or die "Unable to establish a POP3
+ connection to $hostname.\n";
defined($handle->login($account, $password)) or die "Unable to authent
+icate ($account, $password) at $hostname.\n";

#  Method "last" this not working...
#my $last = $handle->last();
# We try another tring (finded at
http://justskins.com forum):
my $last = (sort {$a<=>$b} keys %{$handle->list})[-1];

if ($last > 0)
{
    for ($mailidx=1;$mailidx<=$last;$mailidx++)
    {
        $handle->delete($mailidx);
    }
    my $now = localtime time;
    print $now." ".$account.": ".$last." message(s) deleted.\n";
}
else
{
    my $now = localtime time;
    print $now." ".$account.": 0 messages in mailbox.\n";
}

$handle->quit();

sub usage {
print "Use this utility as 'pop_check HOSTNAME ACCOUNT PASSWORD',\n";
print " or 'pop_check -help', to see this message.\n";
exit($_[0]);
}

Комментарии к скрипту:
- в начале проверяются параметры, переданные скрипту, и если их нет, то выводится листинг подсказки (функция usage)
- происходит присвоение аргументов скрипта переменным $hostname, $account, $password
- происходит коннект к серверу и логин
- в переменную $last хитрым способом записывается количество сообщений в ящике
- если письма есть, то по циклу они все удаляются одно за другим
- в конце выводится соответствующее сообщение

[Как запускать]
Вот так запускается скрипт на FreeBSD:
# perl /script_folder/mailbox-clean.pl mail.mydomain.ru cleanedbox+mydomain.ru pop3_password_here >> /root/clean.mail.mydomain.ru.log

Тут все просто - запускается интерпретатор perl и ему в командной строке передается файл скрипта mailbox-clean.pl и его параметры. Параметры в этом примере такие:
mail.mydomain.ru        - адрес POP3-сервера, где находится очищаемый ящик
cleanedbox+mydomain.ru  - адрес ачищаемого ящика cleanedbox@mydomain.ru
pop3_password_here      - пароль к почтовому ящику
>> /root/clean.mail.mydomain.ru.log - в этот лог будут писаться сообщения наподобие:
Sat Jun 18 18:31:04 2009 cleanedbox+mydomain.ru: 946 message(s) deleted.
Sat Jun 19 20:41:01 2009 cleanedbox+mydomain.ru: 0 messages in mailbox.

[Как настроить автоматический запуск]
Для этого надо добавить в конец файла /etc/crontab строку:
15       1       *       *       *       root    perl /script_folder/mailbox-clean.pl mail.mydomain.ru cleanedbox+mydomain.ru pop3_password_here >> /root/clean.mail.mydomain.ru.log

В этом примере скрипт будет запускаться каждую ночь в 01:15.

Последнее обновление ( 20.06.2009 )
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017