Borrando e-mails en masa en Zimbra

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/^ss*//" | sed -e "s/ss*/ /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.

12 comentarios en «Borrando e-mails en masa en Zimbra»

  1. Si guarda mensajes en su propia bbdd me da mal rollo. Me recuerda a Lotus Domino. Tiene ventajas, pero la gestión aumenta.
    Por otro lado, la gestión a nivel administración por lo que cuentas, adolece de lo mismo que otras soluciones Open Source: Usabilidad. El borrado masivo de mensajes es algo básico en otros sistemas. Aún les falta mucho, entonces..Aún recuerdo trabajar con el QMail y sufrir lo indecible para hacer una tarea básica de redireccionamiento de correo sin almacenamiento local. ¡Estos frikis! 😉

    1. Tienes toda la razón, uno de los puntos flacos del Open Source es la usabilidad, no cualquiera puede usarlo, pero por otro lado tiene sus beneficios como escalabilidad, seguridad, auditabilidad, etc. Aunque no se si sere yo, pero en general Zimbra me parece bastante simple de administrar desde su control panel. Pero en gusto y colores no han escrito lo autores.
      La próxima vez que tengas problemas con algún software Open Source, hay dos caminos. El primero usar Google o la documentación del proyecto, generalmente todo está alli. El segundo, hey! contratame como consultor 🙂

  2. Buenos dias
    prove el script pero no me funciono ni ahi si podria ser mas especifico en cuanto a la carpeta , la forma enque se debe agregar la cuenta .. por q ya prove de todas las formas y no funciona me tira un error de sintaxis ..
    gracias
    saludos

  3.  

    La "carpeta" es el nombre del folder en Zimbra donde están los correos, si tu usuario no creo carpetas nuvas los emails son dejados por defecto en "Inbox". Yo he probado el script para Zimbra Community que es la version free. El nombre de la cuenta debe ser la dirección de correo completa del usuario, por ejemplo juan@midominio.com, no solamente "juan".
     
    Si lo que tienes es error de sintaxis puede ser que estes usando una versión de Zimbra diferente a la Community, revisa cual es el error y corrigelo. En todo caso si copias y pegas el error será más fácil poder decirte como solucionar el problema.
    1. Comparto tu opinion en relacion al espacio que muchos clientes utilizan en sus cuentas de correos.

      He copiado tu script y al correrlo me envia el siguiente error.

       

      ERROR: zclient.CLIENT_ERROR (limit must be 1-1000)
      Terminado. Desea ejecutar otra vez el comando para el mismo usuario?

      le doy si y me pregunta lo mismo. 

      Saludos

       

      1. No, en mi caso no obtengo ese error, lo único que te puedo aconsejar es que compruebes que ejecutas el script como usuario «zimbra». Un dato más que tal vez sea de utilidad es que yo uso Debian para todos mis servidores, así que tal vez si estas usando otra distribución puede haber un seteo de tu distro que está limitando a zimbra.

        Suerte.

  4. Puedes crear un filtro indicando como criterios que los correos cumplan que estén entre la fecha del primer correo y la fecha del último correo.

    la acción que debes elegir es elimiar.

    lo guardas.

    y lo ejecutas.

  5. Me podrias ayudar a generar un escript que busque los buzonez con mas del 90% de capacidad y que libere esos buzones dejandoles solo el 10% de su informacion

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.