$smtp->datasend("Сообщаем о публикации на intuit.ru\n");
$smtp->datasend("курса лекций по Perl 5\n");
$smtp->dataend; # заканчиваю
$smtp->quit; # отсоединяюсь
Если нужно в программе проверить почтовый ящик на сервере, то с помощью класса Net::POP3 не составит труда написать короткую программу, принимающую электронную почту. Например, такую:
use Net::POP3; # используем класс для получения e-mail
my $mail_server = 'shadrinsk.net'; # почтовый сервер
if ($pop->login($user, $password) > 0) {# регистрируюсь
my $numbers = $pop->list; # получаю номера писем
foreach my $numbers (keys %$numbers) {# по номеру
my $message = $pop->get($numbers); # получаю письмо
print @$message; # печатаю его
$pop->delete($numbers); # удаляю с сервера
}
}
$pop->quit; # отсоединяюсь
На серверах CPAN есть множество программ для работы с электронной почтой, включая серверы. На Perl написана свободно распространяемая почтовая система с web-интерфейсом Open WebMail (openwebmail.org). На нем же написана и одна из самых известных и эффективных серверных систем фильтрации спама - SpamAssassin.
Системы мгновенного обмена сообщениями (instant messaging), иногда также называемые Интернет-пейджерами, получили огромное распространение: миллионы людей ежедневно общаются с помощью ICQ, Jabber, AOL Instant Messenger или Yahoo!Messenger. В архивах на сайте CPAN можно найти Perl-модули для работы со всеми этими системами. Хотя этот обмен сообщениями ориентирован на взаимодействие людей, его можно использовать для программного извещения пользователя о каком-либо событии. Для примера напишем программу, отправляющую сообщение с использованием открытого протокола мгновенного обмена сообщениями XMPP/Jabber (дополнительный модуль Net::Jabber нужно установить из архива CPAN). В примере после соединения с Jabber-сервером отправляется сообщение пользователю, а после получения
от него ответа работа завершается:
use Net::Jabber; # подключаем класс работы с Jabber
use utf8; # в Jabber используется UTF-8
my $server = 'jabber.shadrinsk-city.ru'; # сервер
my $port = 5222; # порт
my $username = 'perl'; # отправитель
my $password = 'password'; # его пароль
my $resource = 'jud'; # ресурс
my $to_user = 'mshock@jabber.ru'; # получатель
my $client = new Net::Jabber::Client; # создаем клиента
message => \&on_message, # при получении сообщения
);
$client->Execute( # соединяемся с сервером
hostname=>$server, port=>$port,
username=>$username, password=>$password,
resource=>$resource, register=>1,
connectsleep=>0, connectattempts=>1,
);
# завершение программы произойдет в on_message
sub on_connect { # выполнится при подключении к серверу
print "Подключен к $server:$port\n";
}
sub on_auth { # выполнится при регистрации на сервере
print "Зарегистрирован как $username\n";
$client->MessageSend( # ОТПРАВЛЯЕМ СООБЩЕНИЕ
to=> $to_user. '/' .$resource,
subject=>'сообщение от Perl',
body=>'Привет, Jabber!'
);
}
sub on_message { # выполнится при получении сообщения
my $sid = shift; # извлекаем номер и текст
my $message = shift; # ответа и выводим его:
print "Тема:", $message->GetSubject, "\n";
print "Сообщение:", $message->GetBody, "\n";
$client->Disconnect; # отключаемся от сервера
exit(0); # и завершаем работу
}
В этом примере демонстрируется прием программирования, распространенный при работе в многозадачной среде: главная программа организует бесконечный цикл обработки событий, для реагирования на которые вызываются обработчики событий. Конечно, помимо обмена сообщениями Jabber предоставляет целый набор средств для полноценного общения, а Perl дает возможность работать с ними.