LINUX.ORG.RU

Zimbra архивация старых сообщений

 ,


1

2

Есть удаленно работающий почтовый сервер Zimbra 8.6.0_GA_1153 на 1000 пользователей и 4 Тб дискового пространства для почты. 90% этого пространства занято. ОС — Ubuntu. Необходимо: архивировать почту старше 1 года и удалить эти письма из почтовых ящиков.

Вот мой кривой костыль вариант на основе постов CentOS: Zimbra — переносим почтовые ящики с сервера на сервер и Zimbra: удаление случайных или ненужных писем Первым делом останавливаем наш старый почтовый сервер

zimbra # zmcontrol stop

При помощи команды из под пользователя zimbra # выгрузим список всех e-mail адресов в файл, zimbra # zmprov gqu mail | awk '{print $1}' > /tmp/mailbox.txt

затем при помощи скрипта, что бы не бекапить каждый ящик в ручную, заархивируем все письма, старше 400 дней. В первой части команды извлекаем их, затем grep выбирает только старые письма и передает их на архивирование.

#!/bin/bash filename='mailbox.txt' filelines=`cat $filename` for line in $filelines ; do /opt/zimbra/bin/zmmailbox -z -m $line getRestURL «//?fmt=tgz» > /tmp/$line.tgz done

Уверен, что удаление этих писем после архивирования можно выполнить простым способом. Именно в этом прошу подсказки. В настоящее время планирую решать это по информации из хабрахабра так:

#!/bin/bash

DOMAIN_NAME=«corp.org» # Тут домен EMAIL=/tmp/email.list # Это список всем ящиков MESID=/tmp/mesid.list # это ID писем для удаления DELTEXT='вечеринка' # Слово в теме письма или сама тема письма

IFS=$'\n' # Переменная отвечающая за разделитель поля

before=«$(date +%s)» # Время запуска скрипта t=0 # Переменная, для подсчета удаленных писем

/opt/zimbra/bin/zmprov -l gaa $DOMAIN_NAME | sort > $EMAIL # Собираем список ящиков

# Ну и циклом их перебираем

for i in $(cat $EMAIL); do echo $i # Тут мы получаем список всех папок, отсеим папки которые расшаренные, так как они и так будут пройдены и исключаем папки, которые не почтовые - это Портфель, и Контакты и прочие, не mess

/opt/zimbra/bin/zmmailbox -z -m $i gaf | grep mess | cut -d"/" -f 2- | grep -v «@corp.org» > /tmp/messfolder.list # Теперь циклом проходим по списку и получаем название папки, затем всталяем в запрос и получаем id сообщения для удаления. И так проделываем с каждой папкой.

for p in $(cat /tmp/messfolder.list); do echo $p # Тут все просто: до первого grep мы выводим сообщения из ящика, grep фильтрует по дате, второй grep по теме, затем sed'ы убирают лишние пробелы и cut вырезает остаток и получаем чистый, фильтрованный номер сообщения. /opt/zimbra/bin/zmmailbox -z -m $i s -l 300 in:«\»$p"\" | grep `date -d '-5 day' +%m/%d/%y` | grep «$DELTEXT» | sed -e «s/^\s\s*//» | sed -e «s/\s\s*/ /g» | cut -d" " -f2 > $MESID

# Выводим номер сообщения и считаем кол-во сообщений. cat $MESID count=`grep " $MESID -c` let t=$t+$count

for a in $(cat $MESID | grep ^- | sed s/-//g ) do /opt/zimbra/bin/zmmailbox -z -m $i deleteMessage $a done

for a in $(cat $MESID | sed /-/d) do /opt/zimbra/bin/zmmailbox -z -m $i deleteConversation $a done echo -n > $MESID RES=$? if [ «$RES» == «0» ]; then echo "[Ok]"; else echo "[Err]"; fi

done

echo «Найдено писем: »$t

done

after=«$(date +%s)» elapsed=«$(expr $after - $before)» hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo «Скрипт выполнялся: $hours часов $minutes минут $seconds секунд» echo «Всего удалено: »$t" писем"

Очень буду рад, если напишешь чем закончилось. Столкнулся с аналогичным вопросом, так что буду, весьма, весьма признателен за решение.

DALDON ★★★★★ ()

Скажу тебе, как автор статьи с хабра)

Пока что не нашел более быстрого решения, но на будущее...

в настройках самой зимбры есть удаление старых писем, и оно указаннный период пробегает и чистит в фоне все ящики...

на 7 версии это у меня работало как надо, а на 8 ... мне это не нужно было, по этому даже не настраивал..

Посмотри, там что-то было подобное...

firefedot ()
Ответ на: комментарий от firefedot

Просто удаление или архивация? Есть ли вариант архивации, что-то типа переноса в другое хранилище, до тех пор пока пользователь не запросит назад?

tmp_do ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.