8. Миграция почтовых серверов¶
- Содержание
- 8. Миграция почтовых серверов
Эта утилита обладает двумя достоинствами:
- Она чрезвычайно корректно работает (сохраняет правильную структуру каталогов, правильно обрабатывает национальные языки и пр.);
- Эта утилита универсально по своему определению (использует механизм IMAP). Благодаря этому ее можно использовать с любыми типами почтовых серверов будь то Postfix, MS Exchange или Lotus Domino.
- Сервер Tegu внесен в список серверов , совместимость которых с imapsync подтверждена.
Установка утилиты¶
Если вам не удалось установить из штатного репозитория вашего дистрибутива операционной системы, то нам поможет сайт французского разработчика imapsync Жиля ЛамирАля (Gilles LAMIRAL), gilles@lamiral.info - https://imapsync.lamiral.info/
Я не просто так написал тут его email - о себе Жиль пишет так "Понимаю, что звучит безумно, но я отвечаю на все письма".
Предварительно установим необходимые пакеты:
sudo apt install -y \ libauthen-ntlm-perl \ libcgi-pm-perl \ libcrypt-openssl-rsa-perl \ libdata-uniqid-perl \ libencode-imaputf7-perl \ libfile-copy-recursive-perl \ libfile-tail-perl \ libio-socket-inet6-perl \ libio-socket-ssl-perl \ libio-tee-perl \ libhtml-parser-perl \ libjson-webtoken-perl \ libmail-imapclient-perl \ libparse-recdescent-perl \ libmodule-scandeps-perl \ libreadonly-perl \ libregexp-common-perl \ libsys-meminfo-perl \ libterm-readkey-perl \ libtest-mockobject-perl \ libtest-pod-perl \ libunicode-string-perl \ liburi-perl \ libwww-perl \ libtest-nowarnings-perl \ libtest-deep-perl \ libtest-warn-perl \ make \ time \ cpanminus
Получаем утилиту:
wget -N https://imapsync.lamiral.info/imapsync
Присваиваем исполняемые права
chmod +x imapsync
Утилита готова к работе.
Запущенная без параметров она возвращает синопсис.
$ ./imapsync Name: imapsync - Email IMAP tool for syncing, copying, migrating and archiving email mailboxes between two imap servers, one way, and without duplicates. Version: This documentation refers to Imapsync $Revision: 2.200 $ Usage: To synchronize the source imap account "test1" on server "test1.lamiral.info" with password "secret1" to the destination imap account "test2" on server "test2.lamiral.info" with password "secret2" do: imapsync \ --host1 test1.lamiral.info --user1 test1 --password1 secret1 \ --host2 test2.lamiral.info --user2 test2 --password2 secret2
Настройка синхронизации¶
Рассмотрим следующую модель переноса:
Следуя инструкции получаем примерно следующую команду для синхронизации одного почтового ящика:
imapsync \ --host1 mail.mbk-lab.ru --user1 ikalmetov@mbk-lab.ru --password1 МойПароль1 --ssl1 \ --host2 mail.test.tegu.online --user2 ikalmetov@test.tegu.online --password2 МойПароль2 --ssl2 \ --dry
Ключ --dry говорит, что выполнять перенос сообщений не надо, надо только показать как все это будет выглядеть (проверочный режим). Рекомендуется отладить команду с использованием этого ключа и только затем убрать его из команды чтобы выполнить перенос.
Обратите внимание, что для работы утилиты необходимо указать логины и пароли каждого пользователя.
На серверах Tegu для этой цели можно воспользоваться функцией мастер-пользователя - это заметно упрощает практическую работу, не требуя данных каждого пользователя.
Чаще всего аналогичные права можно задать и на других почтовых серверах и это первое, что вы должны уточнить.
" Если нет, оставьте это чтение, возьмите носовой платок и поплачьте " - советует нам Жиль.
Для примера несколько серверов, поддерживающих мастер-пользователей:
- Exchange 2003/2007/2010/2013/2016
- Office365
- Gmail
- Dovecot
- Zimbra
- Kerio
- Cyrus-imap
- James
- UW-imap
Перенос почты в пакетном режиме¶
Создаем несложный скрипт imapsync_batch:
#!/bin/bash { while IFS=';' read u1 p1 u2 p2; do imapsync --host1 mail.mbk-lab.ru --user1 "$u1" --password1 "$p1" \ --host2 mail.test.tegu.online --user2 "$u2" --password2 "$p2" done ; } < file.txt
Очевидно, что скрипт построчно читает файл с параметрами, после чего вызываем imapsync с указанными параметрами.
Создаем файл параметров users.csv:
ikalmetov@mbk-lab.ru;МойПароль1;ikalmetov@test.tegu.online;МойПароль2 user002_1;password002_1;user002_2;password002_2 user003_1;password003_1;user003_2;password003_2
Остается выполнить:
imapsync_batch < users.csv
В финале вы получите что то похожее на это:
Host1 Total size: 2635716542 bytes (2.455 GiB) Host2 Total size: 2561889417 bytes (2.386 GiB) Host1 Biggest message: 34710913 bytes (33.103 MiB) Host2 Biggest message: 34710913 bytes (33.103 MiB) Time spent on sizing: 4.9 seconds ++++ Statistics Transfer started on : Пятница 22 апреля 2022-04-22 10:55:20 +0300 MSK Transfer ended on : Пятница 22 апреля 2022-04-22 13:04:25 +0300 MSK Transfer time : 7744.8 sec Folders synced : 11/11 synced Messages transferred : 7354 Messages skipped : 249 Messages found duplicate on host1 : 248 Messages found duplicate on host2 : 12 Messages found crossduplicate on host2 : 0 Messages void (noheader) on host1 : 0 Messages void (noheader) on host2 : 0 Messages found in host1 not in host2 : 2 messages Messages found in host2 not in host1 : 33 messages Messages deleted on host1 : 0 Messages deleted on host2 : 0 Total bytes transferred : 2480216436 (2.310 GiB) Total bytes skipped : 15442 (15.080 KiB) Message rate : 0.9 messages/s Average bandwidth rate : 312.7 KiB/s Reconnections to host1 : 0 Reconnections to host2 : 2 Memory consumption at the end : 335.7 MiB (started with 171.8 MiB) Load end is : 1.61 1.34 1.02 1/1241 on 4 cores CPU time and %cpu : 1679.15 sec 21.7 %cpu 5.4 %allcpus Log file is LOG_imapsync/2022_04_22_10_55_20_476_ikalmetov@mbk-lab.ru_ikalmetov@test.tegu.online.txt
Скорость переноса¶
Очевидно, что на данный вопрос мы не можем ответить т.к. это зависит от пропускной способности конкретных каналов связи, производительности почтовых серверов и объемов почтовых сообщений. Тут вам придется поэкспериментировать самостоятельно.