Zimbra — Шпаргалка

zimbra Zimbra

Запуск/перезапуск

zmcontrol start|stop|restart|status

Перезапуск postfix (например, если правили конфиг)

zmmtactl reload

или

postfix reload

Информация о почтовом ящике

zmprov getMailboxInfo sharre@diamondplatinumrealty.com

Переиндексировать ящик

zmprov reIndexMailbox   valynkin .pavel@propertyminder.com start|status|stop

Посчитать количество писем в Inbox (getAllFolders)

zmmailbox -z -m system@propertyminder.com gaf | grep Inbox | awk '{print $4}'

Если в логах сообщения со словами NO_SUCH_BLOB

то это значит, что произошло рассогласование между метаданными ящика и физическими файлами с письмами. Ну т.е. в метаданных есть ссылки на письма, а по факту файлов уже нет. Устраняется путем перестроения метаданных на основе существующих файлов с письмами в ящике.

Для того, что бы найти ящики, у которых проблема:

grep -B2 NO_SUCH_BLOB /opt/zimbra/log/mailbox.lo* |grep mailbox= |sed -r 's/.*mailbox=([0-9]*).*$/\1/' |sort -u

Пофиксить:

zmblobchk --mailboxes 6919 --export-dir /tmp --missing-blob-delete-item start|status|stop
zmblobchk --mailboxes 4600 --export-dir /tmp/3 --missing-blob-delete-item --unexpected-blob-list /tmp/3/blob-list start

Работа с аккаунтом galsync

Информация об источниках данных (getDataSources)

zmprov gds galsync@vpstest.ru

Удалить аккаунт galsync

zmgsautil deleteAccount -a galsync@vpstest.ru

Узнать аккаунт (user account) по номеру ящика (MailboxId)

su - zimbra
mysql
use zimbra;
select comment from mailbox where id=257;

+----------------------+
| comment |
+----------------------+
| user@domain.com |
+----------------------+
1 row in set (0.00 sec)

Апдейт правил spamassasin

zimbramon /bin/sa-update

Очистка ящиков от удаленных писем

Зимбра производит операцию purge_mailbox только для тех ящиков, которые находятся в момент выполнения операции в памяти (т.е. к ним кто то законнечен). По этому для редко используемых ящиков очистка не срабатвает. В ручном режиме:

Получаем ZimbraID ящика

zmprov -l ga letterbackup@propertyminder.com zimbraId

Загружаем ящик в память выполнив пустую операцию

zmmailbox -z -m letterbackup@propertyminder.com noOp

Очищаем ящик

zmsoap -v -z PurgeMessagesRequest/mbox @id=1ab5cf73-b393-4ae0-9723-05ee92131980

вот так:

[zimbra@mail ~]$ zmprov -l ga letterbackup@propertyminder.com zimbraId
    # name letterbackup@propertyminder.com
    zimbraId: 1ab5cf73-b393-4ae0-9723-05ee92131980

[zimbra@mail ~]$ zmmailbox -z -m letterbackup@propertyminder.com noOp
[zimbra@mail ~]$ zmsoap -v -z PurgeMessagesRequest/mbox @id=1ab5cf73-b393-4ae0-9723-05ee92131980
   <PurgeMessagesRequest xmlns="urn:zimbraAdmin">
      <mbox id="1ab5cf73-b393-4ae0-9723-05ee92131980"/>
    </PurgeMessagesRequest>
    <PurgeMessagesResponse xmlns="urn:zimbraAdmin">
      <mbox id="1ab5cf73-b393-4ae0-9723-05ee92131980" mbxid="6867" s="3030290"/>
    </PurgeMessagesResponse>

Можно пройтись по всем ящикам вот таким скриптом purge-all.sh:


#!/bin/bash
# purge-all.sh
# run as user zimbra
#   $ ./purge-all.sh
# or crontab monthly/weekly
#   0 1 1 * * /usr/local/bin/purge-all.sh

# config
TMPDIR="/var/tmp"
LOGDIR="/opt/zimbra/log"
SLEEP=10

if [ "$USER" != "zimbra" ]; then
  echo "Error: Must be run as user zimbra"
  exit 1
fi

DATE="`date '+%Y%m%d-%H%M%S'`"
exec >> $LOGDIR/purgeall-$DATE.log

echo "`date`: START $0"
zmprov -l gaa -s `zmhostname` > $TMPDIR/purgeall-list.out

for MYUSER in `cat $TMPDIR/purgeall-list.out`
do
  echo "`date`: Starting user: $MYUSER"
  ACCOUNT_ID="`zmprov -l ga $MYUSER zimbraId | awk '/^zimbraId:/ {print $2}'`"
  if [ -n "$ACCOUNT_ID" ]; then
    zmmailbox -z -m $MYUSER noOp && \
      zmsoap -v -z PurgeMessagesRequest/mbox @id=$ACCOUNT_ID
    if [ $? = 0 ]; then
      echo "`date`: Finished user: $MYUSER"
    else
      echo "`date`: Error: $MYUSER"
    fi
  fi
  sleep $SLEEP
done

echo "`date`: END $0"
exit 0

Все

Оцените статью
Добавить комментарий