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