"Lo pequeño es hermoso" -- Filosofía Unix
Alguna vez pensaste qué lleva crear un sitio web que pueda ser administrado completamente por correo? Eres uno de esos fanáticos del e-mail que desea manejar todo por correo? Eres uno de los que desea algo diferente? Si tu respuesta es si a alguna de éstas preguntas, continúa leyendo...
Alguna vez pensaste cómo un corresponsal especial de la CNN, reportando desde el lugar más remoto de la tierra, puede hacer que la página web modifique su contenido basado en sus últimos reportes? O cómo los diarios puntocoms manejan cientos de páginas HTML por día? Lo logran mediante un concepto llamado Sistema de Administración de Contenidos (Content Management System - CMS).
La Administración de Contenidos es uno de los tópicos más prominentes con los que un sitio web debe lidiar, desde los sitios con poca carga hasta los de contenido intensivo. Un CMS básico debe, como mínimo, proveer una interfase amigable con el usuario para modificar el contenido web. Uno sofisticado hace mucho más que eso; no sólo provee administración de creaciones, modificaciones y borrado del contenido, sino también servicios como control de revisiones, jerarquías, adm.de contenidos multicanal y envío, etc. En éste artículo hablaremos acerca de un canal relativamente nuevo para la Administración de Contenidos muy conocido por los lectores: el e-mail! Aunque éste canal en particular ha sido utilizado por CMS comerciales como Vignette, son bastante caros y se venden en base a su particularidad.
Si el párrafo anterior te suena a Griego entonces eres un candidato para leer éste artículo. Aguarde y aprenderá la implementación más simple de CMS basado en e-mail, con Procmail.
Aquí le mostraremos como una página web puede ser actualizada con sólo enviar un correo. Usaremos ésta página de prueba (para ver apropiadamente ésta página, deberías tener Javascript habilitado). Todo lo que contiene es un titular. Actualizaremos el texto del titular al recibir un e-mail con el título apropiado!!!
Procmail puede ser utilizado para crear servidores de correo, listas de correo, clasificar tu correo en diferentes carpetas/archivos (muy conveniente cuando estás suscripto a una o más listas o para otorgar prioridad a tu correo), preprocesar el correo, ejecutar determinado programa al llegar tal correo (p.ej. generar diferentes sonidos en tu estación de trabajo para distintos tipos de correo) o reenviar selectivamente cierto correo automáticamente a alguien.
Si no entiendes alguno de los términos anteriores, no te asustes. sólo siéntate y relájate. Te mostraremos algunos ejemplos básicos de cómo funciona y te explicaremos un lindo método para actualizar el titular en tu página web.
Procmail es una utilidad de filtrado de correo. Puede ser ejecutado por cada correo enviado hacia ti y procesarlo. Digamos, que quieres guardar cada correo con asunto discuss a un directorio llamado discuss. Entonces tienes que escribir las siguientes líneas en los archivos especificados
En tu directorio home creas un archivo llamado.forward y pones las siguientes líneas "|IFS=' ';exec /usr/local/bin/procmail USER=<username>"Reemplaza username con tu nombre de usuario y asegúrate que el camino (path) al binario Procmail esté correctamente configurado. No te preocupes por los detalles. Los veremos en profundidad en la próxima sección.
Crea un archivo llamado .procmailrc en tu directorio home y agrega las siguientes líneas
:0 * ^Subject:.*discuss discuss
Crea un directorio llamado discuss en tu directorio home para agregar los correos con el asunto discuss.
Tratemos de comprender qué pasó aquí. Cuando un correo es enviado a un servidor smtp, se envía al correspondiente usuario por un MDA (Mail Delivery Agent = Agente de Despacho de Correo) como sendmail.Éste programa mira en un archivo llamado .forward; si éste existe trata de ejecutar las reglas especificadas en éste archivo. Usualmente, contiene la dirección de correo adonde será destinado el correo. Además podemos escribir comandos para ser ejecutados por programas como procmail. Esto es exactamente lo que las líneas de arriba en .forward, hacen. Para una explicación detallada de lo que podemos poner en .forward mira aquí. Una vez ejecutado Procmail, mira en el archivo .procmailrc, el cual contiene directivas de procesamiento de correo (qué acciones tomar para los diferentes tipos de correo).
El archivo .procmailrc contiene las reglas de cómo se filtrará el correo. En el ejemplo, la regla indica que para todos los correos con el asunto discuss, redirigirlo al directorio de ese nombre. La sintaxis general para escribir reglas (llamadas recetas en la jerga Procmail) es
:0 [símbolos] [ : [locallockfile] ] <ninguna o más condiciones (una por línea)> <exactamente una acción por línea>
Podemos ignorar la primer línea por ahora. Desde la segunda línea, puedes empezar a escribir condiciones. Una condición que comienza con '*' especifica que se debe compara una expresión regular. Si concuerda, entonces se ejecuta la línea correspondiente a la acción. Si la acción comienza con un '|' entonces se ejecuta el programa que sigue al símbolo. Puedes utilizar el carácter '!'para redirigir el correo a otra dirección. Si la línea de acción no comienza con ninguno de éstos caracteres o con un '{', entonces se asume que es un directorio o un archivo al cual se debe despachar el correo, como en el ejemplo de arriba.
Otro ejemplo nos aclarará el panorama.
:0 c * ^Subject:.*discuss discuss :0 * ^Subject:.*discuss ! tunombre@algunlugar.comEsta receta redirige el correo a la dirección tunombre@algunlugar.com y mantiene una copia en el directorio discuss. El símbolo 'c' en la primer línea le dice a Procmail que debe continuar leyendo recetas aunque concuerde la comparación. Normalmente, se detiene después de la primer coincidencia. La página man de procmailrc dice que 'c' genera una copia del mensaje, pero es más sencillo pensar en la 'c' como "continúa". Cualquiera de las dos tiene el mismo resultado. Otro de mucha utilidad es 'D', que hace que las comparaciones sean sensibles a mayúsculas o minúsculas.
El siguiente ejemplo muestra el uso de '|'
:0 * ^Subject:.*discuss | formail -I "" >> index.htmlSi llega un correo con asunto discuss, se ejecuta formail. Formail es una pequeña utilidad que se puede utilizar para dar formato al correo. La acción anterior, extrae el cuerpo del correo y lo agrega al archivo index.html.
Hemos visto algunos ejemplos básicos. Existe mucha información acerca de Procmail y recetas en la web. Refiérete a la sección de recursos para los enlaces. En las siguientes secciones, mostraremos cómo Procmail se puede usar para actualizar el titular en una página web.
Agregamos las siguientes líneas en .procmailrc. Mi procmailc queda ahora así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;
Las primeras líneas establecen algunas variables, de manera que Procmail funcione adecuadamente. Mira la página man de procmailrc para más detalles.
Aquí, los correos que contengan un asunto "announce" o "notice" se redirigen a formail. formail analiza el correo y cada uno es mandado a un script perl llamado parse.pl. El script actualiza el titular con el contenido del cuerpo del mensaje. La versión del texto del script está aquí#!/bin/perl
$option = $ARGV[0]; # Toma la opción
$my_html_dir = "/cise/homes/ppadala/public_html"; # Mi directorio web
$tmp_file = "/tmp/tmp.out";
$start = 0; #start será falso(0) hasta que encontremos el comienzo del mensaje
$line = ""; #La línea del titular
if($option eq "announce") {
$line = "ANNOUNCEMENTS:";
}
elsif($option eq "notice") {
$line = "NOTICE:";
}
else {
exit(1);
}
#Lee el ingreso. En este caso los correos
#Analiza el cuerpo y lo agrega a line
while( |
Este es un pequeño ejemplo de Administración de Contenidos. Éste es un campo amplio con muchas ramificaciones. Requiere procedimientos bien planeados para actualizar páginas web, mantener su estilo intacto, etc. Hemos mostrado un pequeño ejemplo de cuán fácil es crear un CMS básico con Procmail. Las combinaciones son ilimitadas. Como dijo Descartes "No es suficiente con tener una buena mente. Lo principal es usarla bien".
Pradeep PadalaSoy estudiante de maestría en la Universidad de Florida. Me gusta programar y adoro Linux. Mis intereses incluyen resolver crucigramas y jugar juegos de tablero. Me puedes contactar en p_padala@yahoo.com o mi sitio web.
Prakash Bulusu