Перенос почтовых ящиков в Zimbra

Переносить почту удобней всего сразу на целевой сервер, для этого можно связать серверы по NFS или любым другим способом, таким образом нам не придется выполнять копирование отдельным шагом.

 

-Заходим на сервер и получаем список аккаунтов:

# su - zimbra

# mkdir /tmp/zimbra
# cd /tmp/zimbra
# zmprov -l gaa example.com | grep -v This email address is being protected from spambots. You need JavaScript enabled to view it. > users.txt

-Получаем хэши аккаунтов:

# nano pass.sh

#!/bin/bash
cat users.txt | while read line
do
   array[i]="$line"
   zmprov -l ga ${array[i]} userPassword | sed s/#\ name/zmprov\ ma/ | tr '\n' ' ' | sed s/:\ /\ \'/ | sed s/\ \ /\',/ | tr ',' '\n' >> /tmp/zimbra/restore_pass.sh
   let i++
done

-Экспортируем ящики:

# nano export.sh

#!/bin/bash
cat users.txt | while read line
do
   array[i]="$line"
   zmmailbox -z -m ${array[i]} -t 0 getRestURL "//?fmt=tgz" > /tmp/zimbra/${array[i]}.tar.gz
   let i++

done

также можем экспортировать ящики за определенный период, например с 15.04.2018 по 16.07.2018:

zmmailbox -z -m ${array[i]} -t 0 getRestURL '//?fmt=tgz&query=under:/ after:"4/15/18" AND before:"7/16/18"' > /tmp/zimbra/${array[i]}.tgz

- Экспортируем фильтры ящиков:

# nano filters_export.sh

#!/bin/bash
cat users.txt | while read line
do
   array[i]="$line"
   zmprov ga ${array[i]} zimbraMailSieveScript| sed -e 1,1d -e 's/^zimbraMailSieveScript: //' -e /require/s/^/\'/ -e '$a\G355TRS'|sed s/G355TRS/\'/ | gzip -6  > /tmp/export/filter_in/${array[i]}.gz

zmprov ga ${array[i]} zimbraMailOutgoingSieveScript | sed -e 1,1d -e 's/^zimbraMailOutgoingSieveScript: //' -e /require/s/^/\'/ -e '$a\G355TRS'|sed s/G355TRS/\'/ | gzip -6  > /tmp/export/filter_out/${array[i]}.gz

let i++

done

-Устанавливаем права:

# chmod -R 777 /tmp/zimbra/

-Переносим всё на новый сервер и импортируем:

# nano import.sh

#!/bin/bash
cat users.txt | while read line
do
   array[i]="$line"
   zmprov ca ${array[i]} ZmHpg0LeQSPNZE0c
   zmmailbox -z -m ${array[i]} -t 0 postRestURL "//?fmt=tgz&resolve=reset" /tmp/zimbra/${array[i]}.tar.gz
   let i++
done

-Далее запускаем pass.sh, в нем уже всё готово для импорта хэшей аккаунтов:

# bash pass.sh

-Далее от root импортируем фильтры ящиков(под Zimbra не работает):

# bash filters_import.sh

#!/bin/bash
cat users.txt | while read line
do
   array[i]="$line"
   su - zimbra -c "zmprov ma ${array[i]} zimbraMailSieveScript $(zcat /home/export/filter_in/${array[i]}.gz)"

su - zimbra -c "zmprov ma ${array[i]} zimbraMailOutgoingSieveScript $(zcat /home/export/filter_out/${array[i]}.gz)"
   let i++
done

 На этом перенос почты завершен!

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

Перенос почтового ящика вручную

 

-Выполняем экспорт ящика:

 

# su - zimbra

# zmmailbox -z -m This email address is being protected from spambots. You need JavaScript enabled to view it. -t 0 getRestURL "//?fmt=tgz" > /tmp/export/export_mail.tgz
или за определенные даты:

# zmmailbox -z -m This email address is being protected from spambots. You need JavaScript enabled to view it. gru '//?fmt=tgz&query=under:/ after:"6/15/17" AND before:"8/9/18"' > /tmp/export/export_mail.tgz

 

-Выполняем экспорт входящих и исходящих фильтров ящика:

# zmprov ga This email address is being protected from spambots. You need JavaScript enabled to view it. zimbraMailSieveScript| sed -e 1,1d -e 's/^zimbraMailSieveScript: //' -e /require/s/^/\'/ -e '$a\G355TRS'|sed s/G355TRS/\'/ | gzip -6  > /tmp/export/filter_in/This email address is being protected from spambots. You need JavaScript enabled to view it.

# zmprov ga This email address is being protected from spambots. You need JavaScript enabled to view it. zimbraMailOutgoingSieveScript | sed -e 1,1d -e 's/^zimbraMailOutgoingSieveScript: //' -e /require/s/^/\'/ -e '$a\G355TRS'|sed s/G355TRS/\'/ | gzip -6  > /tmp/export/filter_out/This email address is being protected from spambots. You need JavaScript enabled to view it.

-Далее выполняем экспорт хэша пароля ящика:

 

# zmprov -l ga This email address is being protected from spambots. You need JavaScript enabled to view it. userPassword | sed s/#\ name/zmprov\ ma/ | tr '\n' ' ' | sed s/:\ /\ \'/ | sed s/\ \ /\',/ | tr ',' '\n' >> /tmp/export/restore_pass.sh

 

-Переносим архив на целевой сервер и создаем соответствующий аккаунт:

 

# zmprov ca This email address is being protected from spambots. You need JavaScript enabled to view it. ZmHpg0LeQSPNZE0c

где ZmHpg0LeQSPNZE0c временный пароль


-Для того чтобы добавить почту к существующей заменяем reset на skip:

 

# zmmailbox -z -m This email address is being protected from spambots. You need JavaScript enabled to view it. -t 0 postRestURL -u https://test.mail.ru "//?fmt=tgz&resolve=skip" /tmp/export/export_mail.tgz

где https://test.mail.ru - вэбка сервера

 

-Выполняем импорт с предварительной очисткой ящика(reset - удаляет всё содержимое ящика перед импортом почты):

 

# zmmailbox -z -m This email address is being protected from spambots. You need JavaScript enabled to view it. -t 0 postRestURL -u https://test.mail.ru "//?fmt=tgz&resolve=reset" /tmp/export/export_mail.tgz

 

-Восстанавливаем пароль командой из файла /tmp/export/restore_pass.sh:

 

# zmprov ma This email address is being protected from spambots. You need JavaScript enabled to view it. userPassword '{SSHA512}EmJ1fiNLL32lgcF5Mf8QhYOCJ6TYhZthavNMgm9NEiFkO5br7KLMmrSjfgJcaCGQoh7fl06KSX6IaWCVt/mQQCYbOvkEtqbVy'

 

- От root выполняем импорт фильтров ящика:

su - zimbra -c "zmprov ma This email address is being protected from spambots. You need JavaScript enabled to view it. zimbraMailSieveScript $(zcat /home/export/filter_in/This email address is being protected from spambots. You need JavaScript enabled to view it.)"

 

su - zimbra -c "zmprov ma This email address is being protected from spambots. You need JavaScript enabled to view it. zimbraMailOutgoingSieveScript $(zcat /home/export/filter_out/This email address is being protected from spambots. You need JavaScript enabled to view it.)"

 

На этом перенос почты завершен!

 

 

Материалы:

https://h1d3.org/posts/zimbra-perenos-pochtovykh-iashchikov.html

https://habr.com/users/levashove/posts/

https://wiki.zimbra.com/wiki/Ajcody-Migration-Notes#Export_Using_Query_String_-_Before_And_After_Dates