Perl для системного администрирования



              

Получение почты - часть 21


Tue, 4 Aug 1998 09:07:15 -0400 (EOT)

Message-Id: <v02130502b1ecb78576a9@[192.168.1.118]>

Date: Tue, 4 Aug 1998 09:07:16 -0400

To: systems@example.com

From: user@example.com (Nice User)

Subject: [Req «15746] printer

Could someone please persuade my printer to behave and print like

printer should9 Thanks much :)

-Nice User.

Пользователь, должно быть, не знает, что вы «пасете стадо» из 30 принтеров. Но можно применить Perl и чуть-чуть наблюдательности,

чтобы сделать умные догадки. Пользователи стараются печатать на принтерах, расположенных ближе всего к тому компьютеру, за которым в данный момент работают. Если бы можно было определить машину, с которой отправлена почта, вероятно, удалось бы вычислить и принтер. Существует много способов получить информацию о связи компьютер-принтер, например, из отдельного файла, из поля в базе данных узлов, о которой упоминалось в главе 5, или даже из службы каталогов LDAP. Вот простой пример, в котором используется простая база данных компьютеров и связанных с ними принтеров:

use Mail: .'Internet; use DB_File;

Slocaldomain = ".example.com";

# printdb - это файл Berkeley DB.

Ключи - имена узлов, значения - принтеры Sprintdb = "printdb";

п анализируем сообщение

Smessage = new Mail::Internet \*STDIN;

$message->head->unfold();

# проверяем тему сообщения

my Ssubject = $<nessage->head->get('Subject');

if (Ssubject =" /print(er|ing)?/i){

ff ищем машину-отправителя (ситаем, что используется формат заголовков Sendmail)

$received = (reverse $rr,essage->head->get( 'Received' ))[0];

($host) =

$received =" /"from \S+ \((?:\S+@)?(\S+)\Q$localdomain\E \[/; }

tie %printdb, "DB_File",Sprintdb or die "Невозможно подключиться к базе данных

Sprintdb:$!\n";

print "Проблема на машине Shost может быть связана с принтером " .

$pnntdb{$host} . "Дп";

untie %printdb;

Если в теме сообщения упоминаются слова «печать», «принтер» или «напечатать», мы выделяем имя узла из заголовка Received:. Для получения этой информации можно применить одно регулярное выражение, т. к. известен формат, используемый для заголовков Received: в нашей сети. Зная имя узла, нетрудно найти связанный с ним принтер в базе данных Berkeley DB. Конечный результат выглядит так:

Проблема на машине buggypea* может быть связана с niroshige. Потратив время на изучение структуры своего окружения, вы найдете разные способы получать больше пользы от почты, доставленной в службу поддержки. Приведенные в этом разделе примеры невелики и созданы для того, чтобы заставить вас задуматься о возможностях. Как еще могут помочь программы, читающие почту (возможно, это почта, отправленная другими программами)? Perl предоставляет много способов проанализировать почту, рассмотреть ее в широком контексте и затем использовать найденную информацию.




Содержание  Назад  Вперед