Администрирование FreeBSD, Linux, ... Perl: чистка почтового ящика по протоколу POP3 Tue, November 05 2024  

Поделиться

Нашли опечатку?

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


Perl: чистка почтового ящика по протоколу POP3 Печать
Добавил(а) microsin   

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

 

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


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

Top of Page