Archivo

Archive for the ‘Tips’ Category

Borrando e-mails en masa en Zimbra

noviembre 17, 2010 2 comentarios

Zimbra es una de las soluciones de correo electrónico que más rápidamente está ganando popularidad tanto por su facilidad de uso, como por sus medidas de seguridad. Aunque es una solución Open Source, la forma como almacena los correos no es ni el clásico Maildir o mbox de la mayoría de otros servidores de correo. La razón para almacenar los correos electrónicos en su propia base de datos es que de esta manera optimizan las búsquedas y pueden integrarlos fácilmente con los otros servicios que incluye el programa. Discutir si esta es la mejor forma de hacerlo o no será motivo para otro post en este blog, pero para ir entrando en materia permitanme contarles el caso de un cliente que tenía aproximadamente 13,000 correos antiguos que ocupaban un espacio de aproximadamente 3.5GB y deseaba que borrara todos los e-mails anteriores a una fecha determinada, este es un problema relativamente fácil de resolver en otros MTA especialmente si usan Maildir, pero este no era el caso ¿qué hacer?

Descrito el problema, les contaré que la solución la encontré en los forums de Zimbra en la forma de un script que hace uso del comando zmmailbox. Como dicen su autor, el script no es perfecto y tiene la limitación de que sólo borra un máximo de 2,500 e-mails cada vez que ejecuta un ciclo a pesar de que claramente el script dice que debe hacerlo en grupos de 100,000; pero aparte de ese pequeño inconveniente funciona a las mil maravillas, al menos en mi caso.

Aquí el script levemente modificado para mostrar los mensajes en español: 

#!/bin/bash
# version .1
#

ZIMBRA_BIN=/opt/zimbra/bin
echo "Introduzca la cuenta de correo:"
read THEACCOUNT

echo "Introduzca la fecha hasta la cual a Ud. le gustaria borrar los correos, en el formato MM/DD/AA. Ejemplo 04/10/09:"
read THEDATE

echo "Desde que directorio desea borrar los mensajes?:"
read THEFOLDER

echo "Ud. va a borrar todos los correos del directorio $THEFOLDER hasta la fecha $THEDATE para la cuenta $THEACCOUNT."
echo "Desea continuar? (s/N): "
read ADD

themagic ()
{
touch /tmp/deleteOldMessagesList.txt
for i in `$ZIMBRA_BIN/zmmailbox -z -m $THEACCOUNT search -l 100000 "in:/$THEFOLDER (before:$THEDATE)" | grep conv | sed -e "s/^\s\s*//" | sed -e "s/\s\s*/ /g" | cut -d" " -f2`
do
if [[ $i =~ [-]{1} ]]
then
MESSAGEID=${i#-}
echo "deleteMessage $MESSAGEID" >> /tmp/deleteOldMessagesList.txt
else
echo "deleteConversation $i" >> /tmp/deleteOldMessagesList.txt
fi
done

$ZIMBRA_BIN/zmmailbox -z -m $THEACCOUNT < /tmp/deleteOldMessagesList.txt >> /tmp/process-`date +%Y-%m-%d`.log
rm -f /tmp/deleteOldMessagesList.txt
echo "Terminado. Desea ejecutar otra vez el comando para el mismo usuario?"
read ADD
}

while expr "$ADD" : ‘ *[Ss].*’
do themagic
done

El formato de la fecha debe ser el establecido por Zimbra en la instalación, como en mi caso es el formato es el americano "Mes/Dia/Año" no he alterado esa parte del script, si Ud. eligio el formato europeo en la instalación debe hacer los cambios respectivos en el script. Para que el script pueda correr debe tener privilegios de administración, es decir debe ejecutarlo como el usuario zimbra o root, todo depende del seteo que se realizó al momento de instalar Zimbra.

Si tienen problemas con copiar/pegar el código del script lo pueden descargar desde aquí. Espero que este script les resulte tan útil como me ha resultado a mi.

Categorías:Internet, Linux, OpenSource, Tips