Иногда у администраторов возникает необходимость перенести почтовый сервер: либо на другое железо, либо даже в какой-нибудь облачный сервис. Задача обычно выглядит простой: на новом месте заводятся аккаунты для всех пользователей, затем копируется почта и наконец правятся MX-записи.
Однако в реальности с переносом почты могут возникнуть трудности: например при переносе в облачный сервис нет прямого доступа к диску, и может не быть удобных средств миграции. В этом случае может выручить утилита imapsync, о которой и пойдёт речь далее.
Допустим что миграция осуществляется с частного почтового сервера в Google Suite и мы уже подошли к тому шагу, когда созданы новые учётные записи в Google Suite. Склонируем репозиторий с исходным кодом mailsync на какую-нибудь машину под управлением Ubuntu 18.04:
git clone https://github.com/imapsync/imapsync.git
Переходим в директорию с исходным кодом:
cd imapsync
Устанавливаем необходимые библиотеки (подробности в файле "INSTALL.d/INSTALL.Ubuntu.txt"):
sudo apt install \ libauthen-ntlm-perl \ libclass-load-perl \ libcrypt-ssleay-perl \ libdata-uniqid-perl \ libdigest-hmac-perl \ libdist-checkconflicts-perl \ libfile-copy-recursive-perl \ libio-compress-perl \ libio-socket-inet6-perl \ libio-socket-ssl-perl \ libio-tee-perl \ libmail-imapclient-perl \ libmodule-scandeps-perl \ libnet-ssleay-perl \ libpar-packer-perl \ libreadonly-perl \ libregexp-common-perl \ libssl-dev \ libsys-meminfo-perl \ libterm-readkey-perl \ libtest-fatal-perl \ libtest-mock-guard-perl \ libtest-pod-perl \ libtest-requires-perl \ libtest-simple-perl \ libunicode-string-perl \ liburi-perl \ libtest-nowarnings-perl \ libtest-deep-perl \ libtest-warn-perl
После этого создадим файл "mails.csv", в котором каждая строка будет иметь вид:
old_login|old_pass|new_login|new_pass|
Здесь "old_login" и "old_pass" - логин и пароль пользователя на старом сервере, а "new_login" и "new_pass" - логин и пароль пользователя на новом сервере.
Если вы мигрируете в Google Suite то вам надо будет зайти в настройки безопасности -> «Основные настройки" -> "Приложения, не обладающие надежной защитой" и на время миграции разрешить приложения, не обладающие надёжной защитой. Без этой настройки может не получится подключиться к IMAP.
После этого остаётся написать небольшой скрипт, который последовательно выполнит imapsync для каждого из наших пользователей. Примерный листинг скрипта:
#!/bin/bash cd `dirname $0` for line in `cat mails.csv | grep -v ^#`; do M_USER=`echo ${line} | cut -d '|' -f1` M_PASS=`echo ${line} | cut -d '|' -f2` N_USER=`echo ${line} | cut -d '|' -f3` N_PASS=`echo ${line} | cut -d '|' -f4` echo "Processing ${M_USER}..." ./imapsync \ --host1 mail.company.com --user1 ${M_USER} --password1 ${M_PASS} \ --host2 imap.gmail.com:993 --user2 ${N_USER} --password2 ${N_PASS} --ssl2 if [ $? -ne "0" ]; then echo ${M_USER} >> mail_errors fi done
После выполнения скрипта в файл "mail_errors" будут записаны логины пользователей, для которых перенос почты не удался. Обычно это связано либо с большим объёмом почты (превышение квоты), либо с наличием спецсимволов в паролях. Поэтому лучше заранее проверить размеры ящиков и хотя бы на время миграции установить на ящики пароли, не содержащие символов, которые при подстановке в команды оболочки могут быть интерпретированы не правильно (например знак доллара или обратный слэш).
В последних ревизиях mailsync появилась поддержка аккаунтов GMail и MS Exchange. Однако в силу ряда причин у автора этих строк не было возможности протестировать этот функционал.
На этом всё. Приятной работы!
Anonymous 2019-01-28 09:51:39 (#)