Запуск/перезапуск
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
Все