Управление контентом с помощью Procmail
|
|
"Прекрасное -- в малом" ВведениеКогда-нибудь задавались вопросом, трудно ли создать веб-сайт, которым можно "рулить" исключительно по e-mail? Вы -- фанат электронной почты, который хотел бы все на свете делать через "емелю"? Вы как раз тот парень, который хочет сделать что-то иначе, не так, как все? Если вы ответили "да" хотя бы на один вопрос, то читайте дальше... Вам интересно, как специальный корреспондент CNN посылает репортаж из отдаленнейшей точки Земли и заставляет веб-страницу отразить его последние сообщения? Или как "дот-ком" газеты ежедневно обновляют и изменяют сотни HTML страниц? Это достигается благодаря концепции под названием Система Управления Содержанием (или, как теперь принято говорить по отношению к веб-сайтам и т.д. -- Система Управления Контентом) [Content Management System или CMS]. Управление контентом -- одна из самых серьезных проблем, которую приходится решать каждому веб-сайту, от маленьких сайтов с крохотной нагрузкой до так называемых "интенсивно-содержательных" [ content-intensive], сайтов со значительным количеством постоянно и часто меняющейся информации-контента. Минимальное требование к системе управления содержанием -- "дружелюбный" интерфейс для изменения веб-контента. Развитая CMS может гораздо больше: не только предоставляет возможности по созданию, модификации и удалению содержания сайта, но и выполняет функцию системы контроля версий, ролевой иерархии, многоканальных управления и доставки контента и т.д. В этой статье мы поговорим об относительно новом канале управления веб-контентом, который, тем не менее, прекрасно известен читателям: об электронной почте! Хотя этот канал используется такими коммерческими CMS, как Vignette, эти решения довольно дороги и продаются с оплатой каждой отдельной функции. Если только что прочитанные абзацы были для вас китайской грамотой, то это значит -- вы Подходящий Читатель для этой статьи. Вперед и вы узнаете о самой простой из всех возможных реализации системы управления веб-контентом, основанной на электронной почте. Эта реализация использует Procmail. Мы покажем, что веб-страницу можно обновить, просто послав электронное сообщение на определенный адрес. Мы воспользуемся для примера этой страницей (для того, чтобы увидеть ее в браузере как надо, нужно разрешить Javascript). Весь ее "контент" -- бегущая строка. Мы будем обновлять текст этой бегущей строки по получению электронного сообщение с правильным полем subject!!!
procmailА при чем здесь Procmail? Procmail следует философии UNIX: одна программа выполняет одну задачу, и делает это эффективно. По своей сути Procmail является удивительно мощной утилитой фильтрации почты. Все, что надо сделать -- написать рецепты, которые будут выполняться по прибытии электронной почты определенного типа. Обычно Procmail используют для того, чтобы раскладывать входящую почту по отдельным директориям. Говоря словами разработчиков:
Если вы не все поняли из сказанного -- не паникуйте. Просто откиньтесь на спинку стула и расслабьтесь. Вскоре мы приведем элементарные примеры того, как это работаем и объясним изящный способ обновления бегущей строки на вашей веб-странице. Лиха беда началоКак уже говорилось, Procmail -- утилита фильтрации электронной почты. Он может запускаться по прибытии каждого сообщения и соответствующим образом его обрабатывать. Скажем, вы хотите, чтобы каждое сообщение с темой discuss сохранялось в папке по имени discuss. Тогда вам надо сделать так: Создайте в своей домашней директории файл "|IFS=' ';exec /usr/local/bin/procmail USER=<username>" Замените Создайте в вашей домашней директории файл :0 * ^Subject:.*discuss discuss Для писем с темой discuss создайте в своей домашней директории папку discuss. Теперь попробуйте послать себе письмо, в котором будет содержаться по крайней мере слово "discuss" в поле темы. Это сообщение будет автоматически помещено в директорию discuss. Давайте попытаемся понять, что происходит. Когда почта посылается
серверу smtp он, с помощью MDA (Mail Delivery Agent -- Агент Доставки
Почты, например sendmail) доставит ее соответствующему ползователью.
Эта программа ищет файл с имененем Файл .procmailrcЭтот файл содержит правила, по которым фильтруется почта. В примере, показанном выше, правило говорит, что вся почта с темой discuss направляется в директорию по имени discuss. Общий синтаксис для написания правил (называемых на жаргоне Procmail рецептами) таков: :0 [флаги] [ : [locallockfile] ] <ноль или более условий (по одному на каждой строке)> <в точности одна команда> Первую строку можно пока проигнорировать. Начиная со второй строки вы можете вставлять условия. Условие, начинающееся с '*' указывает на расширенное регулярное выражение, соответствие которому будет искаться. В случае соответствия быдет выполнена команда в последней строке [action line]. Для того, чтобы перенаправить сообщение на другой адрес, используйте символ '!'. Если строка с командой не начинается ни с этих двух символов, ни с символа '{', то предполагается, что это имя директории или файла, в которые должно быть доставлено сообщение, как это показано в примере. Еще один пример рассеет туман. :0 c * ^Subject:.*discuss discuss :0 * ^Subject:.*discuss ! [email protected] Этот рецепт "форвардит" почту на адрес [email protected] и сохраняет копию в директории discuss. Флаг 'c' в первой строфе указывает Procmail'у продолжить чтение рецептов даже после нахождения соответствия. Обычно Procmail прекращает обработку после нахождения первого соответствия. Руководство по procmailrc сообщает, что 'c' создает копию [carbon copy] сообщения, но легче думать, что 'c' означает "continue" -- продолжить. И то и другое приводит к одинаковому результату. Еще один полезный, но неверно названный флаг -- 'D', который указывает, что поиск соответствия должно быть чуствительно к регистру. Следующий пример показывает использование '|': :0 * ^Subject:.*discuss | formail -I "" >> index.html Если поступает сообщение с темой discuss, выполняется formail: небольшая утилита, используемая для форматирования почты. Приведенная action line выделяет из сообщения тело и добавляет его к файлу index.html. Готовы приступить?Вы увидели несколько основных примеров. В Сети можно найти множество информации по рецептам Procmail. Ссылки можно найти в секции, посвещенной дополнительным ресурсам. В следующих абзацах мы покажем, как можно использовать Procmail для обновления бегущей строки на веб-странице. В.procmailrc мы добавим следующие строки. В текстовом
формате этот файл можно взять здесь.
SHELL=/bin/sh PATH=/bin:/usr/bin:/usr/local/bin :0 * ^Subject:.*announce | formail -s parse.pl announce; :0 * ^Subject:.*notice | formail -s parse.pl notice; Первые строки устанавливают некоторые переменные для того, чтобы Procmail правильно работал. За деталями обращайтесь к руководству по procmail. Сообщения, содержащие "announce" или "notice"
в поле subject, перенаправляются formail, который проводит разбор
сообщений и каждое отдельное сообщение передается скрипту
Все, что делает скрипт -- обновление на веб-странице переменной
ЗаключениеМы показали маленький пример Управления Контентом. Собственно, управление содержанием [content management] -- это очень обширная тема с множеством направлений и ответвлений. Для обновления веб-страниц требуются хорошо спланированные процедуры, сохраняющие нетронутыми таблицы стилей и т.д. Пример лишь показывает, насколько легко создать элементарную систему управления контентом с помощью Procmail. Возможности изменений и развития этой схемы безграничны. Как сказал Декарт: "Недостаточно иметь хороший ум. Главное -- хорошо его использовать". Дополнительные ресурсы
Прадип Падала [Pradeep Padala]Я учусь на мастерской программе в Флоридском Университете. Я люблю "хачить" и обожаю Linux. Еще я люблю разгадывать головоломки и играть в шахматы и т.д. Связаться со мной можно по адресу [email protected] или через мою веб-страницу.
Пракаш Булусу [Prakash Bulusu]Я тоже учусь на мастерской программе во Флоридском Университете. Copyright (C) 2001, Pradeep Padala and Prakash Bulusu.
|
|
Вернуться на главную страницу |