Boletín de RedIRIS n. 54-55

POSTMAN: un cliente WebMail de alto rendimiento

POSTMAN: a High Performance WebMail Client

J. A. López Bueno, Hèctor Rulot

Resumen

"Postman" es un cliente de Correo con interfaz Web diseñado y programado en el Servicio de Informática de la Universitat de València. El programa ha sido desarrollado en respuesta a las necesidades planteadas en nuestra universidad en materia de correo electrónico fácil, seguro, accesible y de alto rendimiento, necesidades que no encontraron solución adecuada en los distintos programas freeware disponibles en ese momento en Internet. La implementación de Postman ha intentado combinar a la vez la facilidad de uso con las máximas prestaciones exigibles a un programa de correo moderno. Postman está siendo ampliamente usado desde principio de año en nuestra institución sin ningún problema.

Palabras clave: cliente de correo web, interfaz Web, IMAP, SMTP, MIME


Summary

"Postman" is a webmail client designed and written in the Computer Center of the University of Valencia. This software has been developed to address the need, raised by our users, of a friendly, safe and widely accessible high performance electronic mail interface. To the best of our knowledge no product in the freeware domain fulfills all those requirements. The goals of the implementation of Postman are easy to use and maximum performance, as expected in a modern e-mail program. Postman has been widely used in our University since the beginning of this year, and the experience has been very successful.

Keywords: web mail client, webmail, Web interface, IMAP, SMTP, MIME


1.- Introducción

A principios de 1998 en la Universitat de València varias circunstancias nos llevaron a pensar en la conveniencia de ofrecer un servicio de correo accesible por Web. Éstas eran:

  • Gran aumento del número de usuarios y de uso del correo electrónico, con el consiguiente incremento en el soporte técnico. Una sola instalación en nuestro servidor http podría dar soporte a todos los usuarios y estos no tendrían que preocuparse de la configuración.

  • Usuarios que estaban fuera de la universidad y querían acceder de modo fácil al correo. Un investigador desde cualquier parte del mundo con conexión a la red podría acceder a su cuenta de correo sin necesidad de transportar su programa cliente ni su agenda.
  • Problemas con la configuración de los SMTP (anti spam) cuando los usuarios no accedían al correo a través de nuestras máquinas. De este modo nuestros usuarios pueden usar nuestro servidor SMTP sin restricción alguna.
  • Universalidad de la interfaz Web. Hoy día es raro encontrar un ordenador que no lleve ya instalado un navegador Web.

Tras las búsquedas pertinentes en la red, y tras varias pruebas con algunos de los pocos clientes de correo que encontramos en ese momento (ver http://www.rediris.es/mail/webmail.es.html ó http://sourcepole.com/sources/reviews/webmail.xml), pronto llegamos a la conclusión que ninguno sastifacía nuestras necesidades. La mayoría eran clientes sencillos de POP3 escritos en lenguajes interpretados (ASP, Perl, Php, Mod_Perl) con muy bajo o nulo rendimiento cuando se hablaba de centenares de conexiones simúltaneas al servidor, al que sobrecargaban requiriendo enormes recursos de memoria y procesador. Otros hacían uso de características innecesarias, como necesidad de accesos a bases de datos; otros abusaban del uso de javascripts, u obligaban al uso de cookies para su buen funcionamiento (donde almacenaban las contraseñas). En la mayoría no funcionaba bien el soporte MIME y/o se requería una conexión/desconexión a la cuenta en el servidor de correo en cada transacción. Todo esto, y con la experiencia adquirida tras casi un año de funcionamiento en pruebas con alguno de los clientes que prometían funcionar, nos convenció que deberíamos programarnos nuestro propio cliente de correo, al que decidimos llamar "Postman". La experiencia nos había servido para tener claras las principales características que nuestro programa o cgi cliente debería tener:

  • Implementado en C ó C++ con el objeto de maximizar rendimiento y portabilidad.

  • Sólo debería usar HTML. No debería hacer uso cookies, java ni javascripts, con lo que se debería poder usar desde cualquier navegador (el mínimo exigible fue Lynx, Netscape e Internet Explorer).

  • Ergonomía bien estudiada para que fuera fácil y cómodo de usar.

  • Cliente IMAP, con posibilidad de utilizar varios servidores y múltiples buzones remotos por usuario. No se encontró necesario soportar el protocolo POP3

  • Que mantuviera la conexión con el servidor IMAP durante la sesión del usuario.

  • Multilenguaje.

  • Soporte MIME. Debería ser capaz de leer con éxito el "mime-torture-test-mailbox" y enviar ficheros adjuntos.

  • Limitar la transición en claro de contraseñas a una sola vez en el inicio de sesión para que cuando el cliente no utilizara el servidor seguro, la seguridad fuera al menos equivalente a un cliente POP/IMAP clásico.

Además, se decidió que los fuentes del cliente que se ha desarrollado estuvieran disponibles en la red.

2.- Diseño

Uno de los mayores escollos con los que tropiezan los clientes de aplicaciones con interfaz www sin el uso de java, es el mantenimiento del estado del programa. Para aumentar la eficacia, sobre todo con servidores de correo como el que utilizaba nuestra Universidad (IMAP-Univ. Washington) que en cada conexión-desconexión analizan el buzón entero, se decidió que entre el navegador Web y el servidor IMAP debería haber un servidor intermedio (que llamamos InterDaemon) que serviría para mantener la conexión entre el servidor Web y el servidor IMAP, además de almacenar el estado de la sesión. El verdadero cliente de correo es, pues, el InterDaemon y mantiene la conexión abierta con el servidor IMAP hasta que el usuario hace un "logout" o se produce un "timeout". Cada transacción es enviada por el servidor www al InterDaemon, el cual contesta consultando previamente al servidor IMAP, si es necesario. Este diseño, aunque en principio complicado, tiene las ventajas de reducir mucho la carga en el servidor donde reside (el CGI ó módulo a ejecutar por el servidor www es mínimo), así como del servidor IMAP. Este diseño también posibilita, si fuera necesario, tener cada servidor en una máquina distinta. El esquema sería:


         TCP/80          stdin/stdout   sockUNIX         TCP/143   

navegador <--> servidor web  <-->   cgi   <--> InterDaemon <--> servidor IMAP

                              |                                |
                               ---------- POSTMAN -------------

Postman, por tanto, se compone de dos elementos: un pequeño cgi llamado cada vez por el servidor Web y un "daemon" permanente, encargado de lanzar los servidores (uno por sesión de usuario) que atienden a los cgi y que mantienen las conexiones con los servidores IMAP. El navegador se comunica por el puerto 80 de TCPIP con el servidor Web, éste lanza el cgi que envía la petición al InterDaemon usando sockets de UNIX y el InterDaemon habla por el puerto TCPIP estándar de IMAP con el servidor IMAP.

El soporte IMAP y MIME se ha implementado haciendo uso de la librería estándar c-client de la Universidad de Washington (escrita por Mark Crispín, el autor de la especificación IMAP). Se ha usado como referencia para el cumplimiento del estándar MIME el "mime-torture-test-mailbox", el cual es leído completamente sin problemas.

Para el envío de adjuntos se ha hecho uso de la especificación "Form-based File Upload" descrita en el rfc1867. Esta especificación es cumplida por la mayoría de los navegadores actuales.

Aparte de estas características principales, Postman también

  • Puede funcionar bajo servidor seguro (SSL).


  • Soporte de agenda con múltiples direcciones por alias, firma y múltiples buzones en el servidor.


  • Todo el sistema funciona bajo un mismo usuario de UNIX, distinto de root. No se usan "setuids".

  • Soporte multilenguaje. Hasta ahora traducido a inglés, español y catalán.

  • Ayuda completa en cada pantalla.

  • Interfaz estética y ergonómica (siendo ésto, obviamente, opinable).

  • Marcado y operación con múltiples mensajes a la vez.

  • Posibilidad de uso del boton BACK del navegador sin pérdida de sincronismo con el servidor (evita la necesidad de recargar continuamente las páginas).

  • Almacenamiento automático de mensajes enviados y volcado de todo un buzón.

  • Reenvío de adjuntos.

  • Almacenamiento de borrador entre sesiones.

  • Es capaz de mostrar adjuntos HTML con imágenes adjuntadas "in-line", los URLs dentro de los mensajes se muestran como "links" efectivos.

  • Conmutación automática de servidor IMAP en función de tabla usuario-servidor (posibilidad de, con el mismo Postman, distribuir la carga entre varios IMAP, según el usuario).

  • Filtros para evitar conexiones múltiples (múltiples pulsaciones de botones) y cierre automático de conexión previa en caso de reconexión.

  • Tiempo de respuesta y ocupación de memoria optimizados.

  • Identificación dinámica de cuál es el proceso que atiende a cada usuario.

  • En composición: cabeceras TO:, CC: y BCC:.

  • Opciones de configuración de la interfaz (tamaño de la ventana de composición,...).

  • Entiende cuerpos HTML con imágenes inline.

  • Límites configurables de tamaño de adjuntos.

3.- Estado actual

Desde principios del año 2000, Postman está funcionando a pleno rendimiento en la Universitat de València en un servidor HP-D230 con sistema operativo HP-UX 10.20 con 256 MB de RAM sin ningún problema. Ha llegado a alcanzar más de cien conexiones simultáneas con una carga máxima del sistema de dos. Uno de los clientes anteriores probados, que hacía uso de tecnología mod_perl, agotaba los recursos del servidor con 60 o menos usuarios (1 Gb de swap, 300 procesos, carga 30).

Postman se puede usar con cualquier navegador (Internet Explorer, Netscape, ...), incluído el lynx (navegador sólo texto).

Postman ha sido compilado y probado con éxito en Linux y HP-UX. No se espera que tenga problemas graves de portabilidad a otros "sabores" de UNIX. Ha sido probado también con los servidores IMAP de la Universidad de Washington y el Cyrus.

En la siguiente referencia podemos ver las estadísticas de usuarios ue hacen uso de la interfaz Web de correo: http://www.uv.es/Estadisticas/MRTG/Correo/numwingpostal.html Se pueden ver volcados de pantalla de Postman en la siguiente URL: http://correo.uv.es/postman/screenshots/screenshots.html Para descargar el programa: http://ftp.uv.es/pub/unix/postman/postman.html ó ftp://ftp.uv.es/pub/unix/postman/postman.tar.gz

4.- Referencias

  • ABERNERS-LEE, T., FIELDING, R., FRYSTYK, H. "Hypertext Transfer Protocol - HTTP/1.0" RFC 1945,Mayo 1996.

  • CRISPIN, M., "Internet Message Access Protocol - Version 4rev1", RFC 2060, Diciembre 1996.
  • FIELDING, R., GETTYS, J. MOGUL, J., FRYSTYK, H., MASINTER, L., LEACH, P., BERNERS-LEE, T. "Hypertext Transfer Protocol - HTTP/1.1", RFC 2616, Junio 1999.
  • FREED, N., BORENSTEIN, N. "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", RFC 2045, Noviembre 1996.
  • FREED, N., BORENSTEIN, N., "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", RFC 2046, Noviembre 1996.
  • FREED, N., KLENSIN, J., POSTEL, J. "Multipurpose Internet Mail Extensions (MIME) Part Four: Registration Procedures", RFC 2048, Noviembre 1996.
  • FREED, N., BORENSTEIN, N., "Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples", RFC 2049, Noviembre 1996.
  • MOORE, K., "MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text", RFC 2047, Noviembre 1996.
  • NEBEL, E., MASINTER, L., "Form-based File Upload in HTML", RFC 1867, Noviembre 1985.
  • POSTEL, J., "Simple Mail Transfer Protocol", RFC 0821, Agosto 1982.

José Agustín López Bueno
dirección de correo agustin [dot] lopez [at] uv.es
Hector Rulot Segovia
dirección de correo hector [dot] rulot [at] uv.es
Servicio de Informática,
Universitat de València