Модуль Mail::Internet позволяет легко написать простую программу для автоматической отправки ответов на полученную электронную почту. Сценарий autoreply.pl, приведенный ниже, аналогичен программе vacation системы UNIX и им может с легкостью воспользоваться любая дизайн-студия или компания другого профиля. При получении почты он проверяет наличие в домашнем каталоге файла .vacation. Если этот файл существует, сценарий подготавливает ответ отправителю с использованием содержимого этого файла. В ином случае программа не выполняет никаких действий.
В сценарии автоответчика используется одно из средств почтовой системы UNIS которое позволяет направлять входящее сообщение электронной почты по каналам программы. При условии, что пользователь применяет такую систему, он может активизировать сценарий, создав в своем домашнем каталоге файл .forward, который содержит, например, следующие строки:
lstein | /usr/local/bin/autоrерlу.рl
Укажите в первой строке свое регистрационное имя, а во второй — путь к сценарию автоответчика. Этот файл сообщает почтовой подсистеме, чтобы она одну опцию входящего почтового сообщения поместила в собственный ящик пользовать для входящей почты, а другую отправила на стандартное устройство ввода сценария autoreply.pl.
Ниже подробно описан сценарий autoreply.pl.
#!/usг/local/bin/per1 -w # Файл: autoreply.pl use strict; use Mail::Internet; use constant HOME => (getpwuid($<))[7]; use constant USER => (getpwuid($<))[0]; use constant MSGFILE => HOME . "/.vacation"; use constant SIGFILE => HOME . "/.signature"; exit 0 unless -e MSGFILE; exit 0 unless my $msg - Mail::Internet->new(*STDIN); my $header = $msg->head; # He отвечать, если сообщение не направлено пользователю my $myname USER; exit 0 unless $header->get('To') =~ /$myname/; # He отвечать, если сообщение отмечено как "Bulk" exit 0 if $header->get('Precedencef) /bulk/i; # He отвечать, если строка From содержит слова Daemon, # Postmaster, Root или адрес самого пользователя exit 0 if $header->get('From1') =~ /subsystem|daemon|postmaster|root|$myname/i; # He отвечать, если строка Subject содержит # слова "returned mail" exit 0;if $header->get('Subject') =~ /(returned|bounced) mail/i; # Все хорошо; теперь можно подготовить ответ my $reply = $msg->reply; # Открыть файл сообщения для составления ответа open (V,MSGFILE) or die "Can’t open message file: $!"; # Добавить строки ответного сообщения my $body =$reply->body; unshift (@$body,<V>,"n"); # Присоединить подпись $reply->add signature(SIGFILE); # Отправить почту $reply->send or die;