Проект

Общее

Профиль

8. Миграция почтовых серверов

Для переноса почты с одного IMAP сервера на другой мы рекомендуем использовать утилиту IMAPSync.
Эта утилита обладает двумя достоинствами:
  1. Она чрезвычайно корректно работает (сохраняет правильную структуру каталогов, правильно обрабатывает национальные языки и пр.);
  2. Эта утилита универсально по своему определению (использует механизм IMAP). Благодаря этому ее можно использовать с любыми типами почтовых серверов будь то Postfix, MS Exchange или Lotus Domino.
  3. Сервер Tegu внесен в список серверов , совместимость которых с imapsync подтверждена.

Установка утилиты


Если вам не удалось установить из штатного репозитория вашего дистрибутива операционной системы, то нам поможет сайт французского разработчика imapsync Жиля ЛамирАля (Gilles LAMIRAL), - 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

Скорость переноса

Очевидно, что на данный вопрос мы не можем ответить т.к. это зависит от пропускной способности конкретных каналов связи, производительности почтовых серверов и объемов почтовых сообщений. Тут вам придется поэкспериментировать самостоятельно.