Итак рассмотрим программу получения сводных данных о содержимом почтового ящика по протоколу POP3.
0: #!/usr/local/bin/perl -w 1: # Файл: pop_stats.pl 2: use strict; 3: use Net::POP3 ; 4: use Mail::Header; 5: use PromptUtil; 6: my ($user,$host) = split(/@/,shift,2); 7: ($user && $host) or die "Usage: pop_stats.pl username mailbox.hostn"; 8: my $passwd = get_passwd($user,$host) || exit 0; 9: my $pop = Net::P0P3->new($host,Timeout=>30) or die "Can’t connect to $host: $!n"; 10: my $messages = $pop->login($user=>$passwd) or die "Can’t log in: ",$pop->message,"n"; 11: my $last = $pop->last; 12 . $message += 0; . 13: print "inbox has messages (", $messages-$last, " new)n"; 14: for my $msgnum ($last+l .. $messages) { 15: my $header = $pop->top ($msgnum) ; 16: my $parsedhead = Mail::Header->new($header); 17: chomp (my $subject = $parsedhead->get ("Subject")) ; 18: chomp (my $from = $parsedhead->get("From")); 19: $from = clean from($from); 20: printf "%4d %-25s %-50sn",$msgnum,$from,$subject; 21: } 22: $pop->quit; 23: sub clean_from { 24: local $_ = shift; 25 /^"( [^"]+)" / && return $1; 26: /^([^]+) / && return $1; 27: /^S+ (([^)]+))/ && return $1; 2 8: return $_; 29: }
Проведем анализ программы.
Строки 1-6. Загрузка модулей. Вызывается модуль Net::POP3 для доступа к удаленному POP-серверу и модуль Mail::Header для интерпретации полученных заголовков писем. Вызывается также новый вспомогательный модуль PromptUtil, который предоставляет функцию get_passwd(), наряду с другими функциями вывода приглашения для пользователя.
Строки 6-8. Получение имени пользователя, имени хоста и пароля. Имена пользователя и хоста берутся из командной строки, и с помощью функции get_passwd () выдается приглашение пользователю ввести пароль. Эта функция отключает эхо-повтор терминала, чтобы пароль не отображался на экране.
Строка 9. Подключение к хосту почтового ящика. Вызывается метод new() модуля Net::POP3 для подключения к указанному хосту с предоставлением серверу 30 секунд, в течение которых он должен ответить приветственным сообщением. Конструктор new() возвращает объект Net::POP3.
Строки 10-13. Регистрация и подсчет сообщений. Вызывается метод login() объекта POP3 для регистрации с именем пользователя и паролем.