Архив

Архив 20 Май 2009

Архивирование и удаление mailbox от удаленных почтовых e-mail

Посмотрев на занятое пространство на почтовом сервере под mailbox для почтовых ящиков нескольких доменов. Я понял, что пора наконец сделать инструмент для удаления не используемых mailbox после удаления пользователей из базы e-mail. Раньше, не было в этом необходимости, но место стало поджимать и настало время разобраться. На помощь пришел bash. На нем я написал вот такой маленький скрипт.

#!/bin/sh

#########################################################################################
#   Created:      Zakharchenko Andrey Ruslanovich
#   Date:         2009.05.20
#   Description:  Поиск mailbox для удаленных почтовых ящиков из базы mysql.
#                      Производится поиск, архивирование в папку хранения и удаление.
#                      исходного mailbox
#########################################################################################

#--- объявляем переменные
i=0
domaindir="/var/files/mail"
mailolddir="/var/files/mailold"

#--- проверяем существование архивной папки
if ! test -d ${mailolddir}.
then
    mkdir ${mailolddir}
fi

#--- составляем листинг доменов
for domain in $( ls ${domaindir} ).
do
#--- создаем в архивной папке доменные папки
    if ! test -d ${mailolddir}/${domain}
    then
             mkdir ${mailolddir}/${domain}
    fi

#--- просматриваем содержимое доменных папок и ищем соответствие mailbox в mysql базе
    for email in $( ls ${domaindir}/${domain} )
    do
tmp=`mysql --user=root -p --database=mail-server --execute="select username.
                                                    from users where username='${email}' "
| awk '$1!="username"'`
#--- если пользователя нету в базе, то архивируем mailbox и удаляем исходную папку
             if test -z ${tmp}
             then
                 TMP=`let "i+=1"`
                 echo -e "Archiving item....  \t  domain: $domain mailbox: ${email}"
                 tar -jcf ${mailolddir}/${domain}/${email}.tar.bz2 ${domaindir}/${domain}/${email}
                 echo -e "Remove item.... \t domain: ${domain}, mailmox: ${email}"
                 rm -rdf ${domaindir}/${domain}/${email}
             fi
    done
done

echo -e "It is processed mail boxes \t $i"

#--- ищем архивные ящики которые хранятся больше полугода и удаляем их
find ${mailolddir} -not -newerct '11 week ago' -and -type f  -delete

От решил все необходимы мне задачи :) Так как порой какой-то невменяемы преподаватель появляется через пол года и просит ему по новой создать почтовый ящик и вернуть ему письма. Из-за этого я сначала архивирую mailbox, а только потом удаляю старый mailbox.