Correo | Contáctenos | Extranet
Búsqueda     Buscar: powered by Google.com  
 
 
 

Configuración de auto respuesta de vacaciones

Por: Andrés Cifuentes [Director de Proyectos]

Una cliente me solicitó le configurara un mensaje de auto respuesta mientras ella se encontraba de vacaciones, basado en lo poco que me acordaba de administración de cuentas de correo, estimé que tendría resuelto el requerimiento en 10 minutos a lo sumo ... 6 horas más tarde, habiendo dedicado cerca de 3 horas reales de trabajo e investigación... logré tener funcionando la auto respuesta.


Descripción del sistema:

Actualmente tengo configurados para este cliente dos servidores que reciben el correo, uno actúa como gateway, filtra los correos (spam, virus, ...) y los enruta al otro servidor donde existen los usuarios, éstos son usuarios virtuales, pues manejan varios dominios. En este servidor está sendmail con la configuración descrita en la documentación para manejo de hosts virtuales "Virtual Hosting with Sendmail".

Descripción del servidor
Server Dell PE 2650
Dual Intel Xeon 2.4Ghz
1GB (DDR) RAM
2x36 GB 10K RPM SCSI
Sistema Operacional Red Hat Linux release 7.3 (Valhalla)
Procmail procmail-3.22-5
Sendmail sendmail-8.12.8-9.1

Procedimiento:

El primer paso es obtener e instalar el RPM del utilitario vacation, normalmente, primero realizo la búsqueda en los updates de Redhat, pero en este caso fue más rápido ingresar a http://rpmfind.net y buscar "vacation" con lo que encontré este RPM, que finalmente fue el que descargué [vacation-1.2.6.1-3.i386.rpm]

1. Instalar el rpm
[root@web10 rpms]# rpm -Uvh vacation-1.2.6.1-3.i386.rpm

Una vez instalado reviso la documentación del utilitario para saber cómo se usa
[root@web10 root]# man vacation



Una lectura rápida del manual de la utilidad me aclara que básicamente lo que hay que hacer es generar el .forward, el .vacation.msg y la base de datos .vacation.db en el home del usuario, para que cuando llegue un correo se le notifique al remitente mediante el mensaje .vacation.msg, este mensaje de notificación se generará una sola vez cada cierto tiempo (configurable cada cuanto, por defecto semanalmente), adicionalmente que el mensaje se guarde normalmente en el Inbox del usuario.

 Así que procedemos a configurar el servicio para la cuenta de micliente@dominio.com que corresponde a "usuario" en mi máquina. (Recuerden que son usuarios virtuales según la tabla virtualuser table de la configuración de Sendmail)

2. Configurar el vacation para el usuario
[root@web10 root]# su - usuario
[usario@web10 usuario]# vacation -I
Inicializa la base de datos de los remitentes que ya hemos notificado (obviamente vacía)
[usario@web10 usuario]# ls -la *.db
 -rw-r--r--    1 usuario popusers       12336 Jan 10 15:27 .vacation.db
[usario@web10 usuario]#vacation



Al ejecutar el comando vacation, automáticamente abre vi (O el editor que tenga configurado por defecto) con un mensaje para que uno personalice, en este caso mi cliente me había enviado un texto para remplazar este mensaje, se debe tener en cuenta que el mensaje debe contener un Subject: y en mi caso preferí adicionarle un From: para que se vea más decente en Outlook.

3. Revisar los archivos generados 
[eforcers@web10 eforcers]$ ls -latr
Reviso entonces los archivos que creó o modificó (En este caso aparecen las copias de los archivos que ya existian .old)
-rw-r--r--    1 usuario popusers         131 Jan 10 18:39 .vacation.old
-rw-------    1 usuario popusers          41 Jan 10 18:39 .forward.old
-rw-------    1 usuario popusers          41 Jan 10 18:39 .forward
-rw-r--r--    1 usuario popusers         131 Jan 10 18:42 .vacation.msg

* Resalto los permisos del .forward pues es muy importante que solo el usuario tenga permisos de lectura sobre este archivo.

Bien, listo hasta ahí llevaba más o menos los diez minutos que había estimado inicialmente, pues me demoré buscando un RPM de vacation específico para Redhat, pero no existe, así que no pierdan tiempo, instalen el PLD o descarguen la última versión de SourceForge



Modificaciónes, Revisiónes y Ajustes:

Luego de la evidente prueba de enviarle el correo a la cuenta micliente@dominio.com mientras monitoreaba el log de sendmail para ver cómo recibía el correo y si se disparaba un correo de regreso a mi cuenta, encontré que no pasaba nada, el correo efectivamente terminaba en el inbox del usuario, pero no se disparaba ningún mensaje de vuelta, tampoco mostraba ningún error, ningún mensaje informativo, no pasaba nada, cero, niet, none ...

Como si sendmail estuviera ignorando el .forward del usuario ... lo que efectivamente sucede, si no se tienen en cuenta estos tres requerimientos, que luego de una búsqueda cuidadosa encontré en el capitulo 25 del manual de O'Relly de sendmail:

  1. "If sendmail cannot read the ~/.forward file (for any reason), it silently ignores that file."
  2. "Before reading the ~/.forward file, sendmail checks to see whether it is a "safe" file - one that is owned by the user or root and that has the read permission bit set for the owner. If the ~/.forward file is not safe, sendmail silently ignores it."
  3. "If sendmail can find and read the ~/.forward file and if that file is safe, sendmail opens the file for reading and gathers a list of recipients from it."

Evidentemente les resalté los permisos que debe tener el .forward pues a mi me llevo cierto tiempo identificar los correctos.

Luego de realizar la prueba de nuevo, encontré que el sistema me respondió un correo, lastimosamente no la auto respuesta que yo esperaba, pero si uno en el que me informaba que había un problema con la ejecución del .forward :

Para una desripción completa de la sintomatología, se puede consultar la siguiente FAQ de sendmail [http://www.sendmail.org/faq/section3.html#3.11] donde especifican claramente que los usuarios para poder ejecutar el .forward deben tener un shell nombrado en el /etc/shells, como mi usuario es un usario de correo, yo les tengo configurado /bin/rbash que no les permite hacer practicamente nada. Adicionando este shell a /etc/shells resolvio el problema de la ejecución del archivo, sin embargo, no resolvió el problema de la autorespuesta.

Finalmente y para no entrar en detalles, terminé usando Procmail en lugar del .forward pues entendí que como el usuario esté en el virtualtable de sendmail, cuando se recibe el correo, sendmail se lo envía directamente al usuario local saltando el .forward, entre otras por que tiene la siguiente directiva

FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl  en el sendmail.mc, aún no me queda claro por qué funciona para usuarios de máquina, pero no para usuarios virtuales.

Para usar Procmail me basé en esta página http://www.cs.columbia.edu/~crf/howto/vacation-howto.html, donde básicamente se pone lo mismo que teníamos en el .forward que nos generó el utilitario vacation.
[root@web10 root]# su - usuario
[usario@web10 usuario]# vi .procmailrc

Bien ahora no olviden eliminar o mover el .forward por que por alguna razón, que en este momento sinceramente no me interesa encontrar, no funciona si lo dejamos.
[usario@web10 usuario]# mv .forward .forward.old

Y listo ahora si hacemos la prueba del envío del correo.  A esta altura tenía un script en el ssh de mi servidor de desarrollo que enviaba la prueba pues no soportaba el proceso de enviarlo una vez más desde mi Outlook.... casi lloro de la emocion al ver que me regresaba el mensaje de autorespuesta.

Conclusión:

La solución es relativamente sencilla, usando la configuración que viene por defecto en la distribución de Redhat, se deben tener cuidado con que el /bin/rbash (o el shell que se tenga para los usuarios) que esté incluido en la lista de los shells y además que los permisos en el .forward estén de acuerdo a la documentación de sendmail (aunque al final no resultó sirviendo para nada por el tema de los usuarios virtuales).

Finalmente me tomó tres horas navegando, investigando y haciendo pruebas, más otras dos escribiendo este pequeño artículo, así que hoy no se hizo nada ... Mañana será otro día(10/01/2006) 

Fecha Ultima actualizacion: 16/01/2006

 
Cra 12 No. 90-20 Of 301 - Tels: 622 83 20/ 622 83 30 - Fax: 622 82 75 Bogotá-Colombia
© Copyright 2006 Todos los derechos reservados. Eforcers ltda.
[www.eforcers.com]