XQT команды в системе электронной почты

Как недорогой, и потому широко доступный сервис, электронная почта стала привычным атрибутом как в системе телекоммуникаций различных предприятий, так и среди широкой аудитории пользователей ПК. Еще 10 лет назад факсимильный аппарат (прежний функциональный конкурент электронной почты) казался экзотической новинкой. Сегодня его наличие скорее говорит о слабой компьютерной подготовке персонала либо указывает на раритетные пристрастия руководителя. Традиционно электронная почта используется для обмена корреспонденциями, бинарными файлами, а также для работы в телеконференциях. Следует отметить, что область применения электронной почты этими функциями не исчерпывается. Существуют известные, но реже используемые возможности, которые представляют так называемые XQT-команды. Их основное назначение - запуск команд и приложений на удаленном компьютере средствами электронной почты. Первоначально они использовались в почтовых Unix системах, работающих по UUCP-протоколу, фактически являясь составной частью системы. Несколько позже появились на других платформах. В настоящее время среди программного обеспечения UUCP-клиентов наибольшее распространение получила программа Minihost 2.х (3.х) for Windows, которая поддерживает создаваемые пользователем XQT-команды как независимый сервис. ПО Minihost может быть сконфигурировано как серверная либо клиентская часть, при этом выполнение XQT- команд возможно на любом компьютере, где оно установлено. E-mail сервер, на котором предполагается выполнение XQT-команды, должен содержать ее описание, а абонент, передающий запрос, - разрешение на доступ. Процедуру регистрации новой команды на узле Minihost 2.х удобно рассматривать в контексте конкретного примера - реализации возможности удаленной печати файлов абонентской станции на принтере e-mail сервера. Для большей ясности укажем конкретные адреса внутренней e-mail сети: сервер - root@putis.p и абонентская станция - root@ssa.putis.p

Прежде всего, необходимо зарегистрировать XQT-команду на сервере. Запустить программу "Администратор", и после ввода входного имени и пароля выбрать в меню "Настройки" опцию "команды XQT". При этом на экран выводится форма, представленная на рис.1. В левой части формы содержится список установленных по умолчанию команд. Перемещая указатель по позициям списка, можно просмотреть их описания. Для добавления новой команды необходимо активизировать кнопку "Создать" и заполнить форму. В рассмотренном примере введены следующие значения:
поля "Имя"prt_file;
"Файл"d:\pr_f.bat;
переключатели "Разрешить выполнение" активен;
"Тип" в положениипрограмма;
"Пакетное выполнение"активен.

Prt_file это произвольно выбранное имя, которое будет передаваться в почтовом сообщении для запуска связанного с ним командного файла pr_f.bat, размещенного в корневом директории диска "d" mail-сервера. Для запускаемого файла (команды) можно описать параметры в одноименном поле. В представленном примере параметры опущены.

Назначение остальных элементов формы очевидно по их наименованиям. При описании команд имеется возможность установить:
- запрет выполнения команды одновременно для всех пользователей;
- тип запускаемого файла - динамическая библиотека/программа, программа/bat-файл (соответственно переключатели "Тип" и "Пакетное выполнение");
- необходимость приостановки транспортной программы на время выполнения команды с целью получения результатов в течение одного сеанса связи;
- блокировку вывода на экран результатов работы, которую можно рекомендовать после отладки XQT-команды (переключатель "Спрятать окно");
- необходимость удаления файла после отработки команды.

После ввода описания команды необходимо активизировать кнопку "Сохранить", при этом ее имя появится в списке.

Следующий шаг - выдача доступа на использование команды внешним абонентам. Для этого необходимо в меню "Настройки" программы "Администратор" выбрать опцию "Доступ хостов к командам XQT". При этом на экран будет выведена форма, представленная на рис.2. Выбрав в левом списке имя созданной команды (prt_file), необходимо отредактировать список пользователей и активизировать кнопку "Сохранить".

Теперь можно описать процедуру печати. Желательно иметь возможность передачи на печать одновременно нескольких файлов в формате prn, а перед отправкой на сервер упаковать их архивирующей программой. Формат prn позволяет выводить на печать любые файлы независимо от среды, в которой они созданы, а упаковка файлов обеспечивает дополнительное сокращение трафика, даже в том случае, когда протокол передачи корреспонденции предусматривает сжатие данных. Сочетание этих функций требует использования bat-файла на стороне сервера. В простейшем случае одиночный файл без предварительной упаковки можно печатать через определение XQT-команды COPY, а сам файл указывать в описании параметров команды.

Возможный вариант файла pr_f.bat может иметь следующий вид:
c:\arc\arj x -y c:\Minihost\Mail\Public\Root\fl.arj с:\Minihost
copy с:\Minihost\*.prn prn
del c:\Minihost\Mail\Public\Root\fl.arj
del с:\Minihost\*.prn

Представленный пример предполагает, что перед отправкой prn-файлы будут упакованы программой arj и сохранены под именем fl.arj. В первой строке файла выполняется извлечение prn-файлов и их размещение в каталог с:\Minihost. Длинный путь размещения файла fl.arj, куда он попадает после доставки на сервер, соответствует директории почтового ящика администратора (при инсталляции по умолчанию). Если указать другой директорий, то потребуется явно указывать путь конечного размещения передаваемого файла перед его посылкой. В следующей строке выполняется печать всех prn-файлов, после чего они удаляются вместе с файлом архива.

После сохранения созданного файла pr_f.bat (в нашем случае на диск "d") можно вернуться в форму "Команды XQT" и активизировать кнопку "Тест" на имени prt_file. При этом имитируется получение текущей команды, что позволяет проконтролировать ее выполнение, минуя процедуру установки соединения и передачи почтового сообщения.

Чтобы удаленно установить задание на печать на стороне клиента, необходимо выполнить следующую последовательность действий:
- выполнить печать документа в файл и заархивировать его под именем fl.arj;
- используя утилиту передачи файла wusfl.exe, отправить файл fl.arj;
- используя утилиту передачи команд wux.exe, отправить команду prt_file;
- запустить программу транспортировки почтовых сообщений wuc.exe.

1) Передача файла. Следует акцентировать внимание на том, что файл передается специальной утилитой wusfl, в отличие от передачи письма с присоединенным файлом из менеджера данных. При передаче присоединенного файла требуются дополнительные действия на сервере по его извлечению. На рис.3 представлена экранная форма, выведенная после запуска утилиты wusfl. Остается только ввести в поле "Путь" имя и место расположения архива fl.arj (в данном случае он находится в каталоге c:\1), а в поле "Хост" - адрес (в случае передачи команды на e-mail-сервер достаточно, как в приведенном случае, указать только его имя). По нажатию кнопки "ОК" файл будет отправлен, т.е. переписан в SPOOL корреспонденций.

Данная утилита представляет еще несколько полезных возможностей. Так, при заполнении поля "Пользователь" можно перенаправить файл другому абоненту, а в поле "Путь" явно прописать место размещения на диске. Если e-mail-сервер находится в составе ЛВС, то это позволит доставлять почту на компьютеры с не установленным ПО почтового клиента, а используя те же XQT-команды, эту связь достаточно просто можно сделать двухсторонней. Это являет собой бесценный инструмент в руках администратора, когда дело касается пользователя, априорно не способного освоить технологию работы с e-mail-клиентом.

2) Передача команды. Для передачи команды используется утилита wux.exe. Вид формы после запуска утилиты представлен на рис.4. Требуется заполнить поле адреса хоста и указать имя команды- prt_file. По нажатию кнопки "ОК" команда будет отправлена вслед за файлом fl.arj, т.е. переписана в SPOOL корреспонденций.

При необходимости утилита позволяет дополнительно указать в соответствующих полях аргументы команды, имя присоединенного к команде файла с данными, а также специфицировать направление вывода результата в полях "Хост", "Пользователь" и "Путь" (соответственно имя, адрес и каталог).

3) Транспортировка файла и команды (т.е. передача содержимого SPOOL через физический канал связи) выполняется утилитой wuc.exe аналогично тому, как это делается при отправке обычных почтовых сообщений.

Рассмотренный простой пример в общих чертах описывает регистрацию XQT-команды на сервере и последовательность обращения к команде со стороны абонентской станции. Безусловно, "E-mail-сервер сетевой печати", например, для домашнего компьютера, далеко не самая серьезная область применения удаленно запускаемых процедур. На их основе можно выполнять построение более сложных коммуникационных систем.

Важной особенностью ПО Minihost является поддержка интерфейса командной строки, о которой стоит поговорить более подробно. Практически все утилиты, выполняемые в интерактивном режиме, могут запускаться программно, что позволяет интегрировать их совместно с XQT-командами в пользовательские приложения в качестве внешних вызываемых процедур. Использование XQT-команд в этом качестве можно рассмотреть на примере достаточно распространенной задачи, суть которой можно сформулировать следующим образом. Имеется действующий комплекс программ локального исполнения, и аналогичный на физически удаленных компьютерах. Требуется с заданной периодичностью производить взаимное, двухстороннее обновление данных с учетом изменений, выполненных в промежутках между сеансами связи. Формат данных не является принципиальным и определяется назначением приложений. Прежде всего, следует отметить, что использование электронной почты (особенно на коммутируемых каналах) накладывает известные ограничения на скорость передачи информации и частоту обновления, поэтому в данном виде это решение можно рекомендовать для относительно небольших объемов информации с умеренными требованиями по оперативности обновления.

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

Прямая передача может быть описана следующей последовательностью:
- приложение на абонентской станции формирует данные из состава новой либо измененной информации за время после предыдущего сеанса связи;
- из приложения запускаются утилиты передачи файла данных, передачи XQT-команды и транспортировки;
- на стороне сервера принимается файл с данными и запускается приложение для его обработки (как результат получения XQT-команды).

Последовательность для обратной передачи имеет вид:
- из приложения на абонентской станции запускаются утилиты передачи XQT-команды и транспортировки;
- на стороне сервера запускается приложение (как результат получения XQT-команды), обеспечивающее подготовку данных для обратной передачи;
- из приложения на стороне сервера запускаются утилиты для обратной передачи файла и транспортировки;
- в течение того же либо следующего сеанса связи приложение на абонентской станции получает файл и выполняет его обработку.

Рассмотрим пример для случая разработки программ в среде FoxPro, реализующей поддержку идентичности записей локального и удаленного приложений. Выберем произвольные имена XQT-команд p_add, p_snd и соответствующих программных файлов rec_add.app, rec_snd.app. Для решения первой задачи описывается XQT- команда следующего вида:
поля"Имя"p_add
"Файл"c:\Program Files\vfp50\vfp.exe
"Параметры"c:\mailapp\rec_add.app
переключатели"Разрешить выполнение"активен;
"Тип" в положениипрограмма;
"Ожидать завершения"активен.

В отличие от рассмотренного ранее примера, в данном случае описание имеет несколько иной вид. Команда "p_add" запускает среду Visual FoxPro (стартовый файл vfp.exe), из которой в свою очередь запускается приложение rec_add.app. Имя приложения указывается в качестве параметра команды. Т.к. в данном случае запускается не командный, а выполняемый программный файл, переключатель "Пакетное выполнение" не активен. Аналогично описывается вторая XQT-команда p_snd, запускающая приложение c:\mailapp\rec_snd.app. Вызов этих команд осуществляется программно со стороны абонентской станции.

Нет смысла подробно останавливаться на содержании приложений rec_add.app, rec_snd.app, т.к. оно может сильно отличаться в соответствии с их назначением. Отметим только, что в какие-то моменты времени они должны обмениваться данными, и покажем, как это делается.

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

Фрагмент программного кода из приложения на абонентской станции, обеспечивающий передачу данных на сервер и удаленный запуск программы автоматической обработки, может быть записан следующим образом:
!c:\minihost\bin\wusfl.exe c:\klient_app\klient_dat.dat putis!~root/klient_dat.dat
!c:\Minihost\Bin\Wux.exe putis!p_add
!c:\Minihost\Bin\Wuc.exe putis -u

Имена файлов и каталогов выбраны произвольно для удобного чтения их функциональной принадлежности.

Первая строка обеспечивает программный вызов утилиты wusfl.exe для отправки файла klient_dat.dat из директория приложения klient_app по адресу домена putis и размещает этот файл в директории root (администратора). Файл источник указывается в качестве первого параметра, второй параметр содержит адрес и имя пользователя + имя, под которым будет сохранен результирующий файл. Суть кабалистических знаков в разрыве имен - прихоть разработчиков Minihost, намекающая своим синтаксисом на злоупотребление работой в ОС UNIX.
Вторая строка обеспечивает вызов утилиты wux.exe для передачи XQT-команды p_add по адресу домена putis. Адрес и имя команды указываются в качестве единственного параметра.

Третья строка обеспечивает вызов утилиты транспортировки почтовых сообщений на e-mail-сервер putis. Ключ "U" предписывает завершение работы утилиты после отработки очереди заданий. При отсутствии ключа утилита останется активной после передачи файла и команды, препятствуя возвращению в программу, из которой была вызвана.

Фрагмент программного кода, обеспечивающий удаленный запуск на сервере программы подготовки обратно передаваемых данных, может иметь следующий вид.
!c:\Minihost\Bin\Wux.exe putis!p_snd
!c:\Minihost\Bin\Wuc.exe putis -u

Первая строка внешнего вызова запускает на абонентской станции утилиту передачи XQT-команды (команда p_snd по адресу putis). В следующей строке запускается утилита транспортировки. При получении команды p_snd на сервере запускается связанная с ней программа rec_snd.app, которая в свою очередь по окончании процесса формирования данных вызывает утилиту передачи ответного сообщения:
!c:\Minihost\bin\Wusfl.exe c:\app_serv\serv_dat.dat ssa!~root/serv_dat.dat

Результатом отработки данной строки является получение файла данных (serv_dat.dat) абонентской станцией и его автоматическая обработка.

В процессе работы файлы с данными принимаются сервером и абонентской станцией, считываются и обрабатываются соответствующими приложениями. В обоих случаях конечным каталогом, из которого выполняется считывание файлов, является c:\Minihost\Mail\Public\Root\. Этот каталог устанавливается при инсталляции ПО Minihost по умолчанию. Возможные изменения при установке ПО должны соответствующим образом отражаться в файлах конфигурации приложений.

Рассмотренные примеры использования XQT-команд и утилит через интерфейс командной строки кратко описывают их синтаксис в минимальном объеме. Более подробно состав спецификаций командной строки изложен в справочной системе ПО Minihost. Инсталляционные файлы ПО Minihost можно переписать с узла ftp://ftp.sph.ru/minihost/mh202rd.zip.

Технология применения XQT-команд позволяет проектировать самые различные системы автоматического обмена и обработки информации с использованием электронной почты в качестве транспортной основы. Область использования таких систем определяется достоинствами и ограничениями электронной почты как таковой.

Эта технология не является альтернативой в достаточно разнообразном ряду программных средств при решении задач удаленного взаимодействия, но скорее дополняет их. Она может рассматриваться как один из начальных вариантов практического решения конкретных задач. Этот вариант является наименее трудоемким по программным и наиболее экономичным по аппаратным затратам ценой понижения требований технического задания до уровня электронной почты в случаях, когда это допустимо.

С. Андросенков


Компьютерная газета. Статья была опубликована в номере 03 за 1999 год в рубрике программирование :: разное

©1997-2024 Компьютерная газета