Перенос почты между сервисами с помощью IMAP Sync

()

Иногда у администраторов возникает необходимость перенести почтовый сервер: либо на другое железо, либо даже в какой-нибудь облачный сервис. Задача обычно выглядит простой: на новом месте заводятся аккаунты для всех пользователей, затем копируется почта и наконец правятся MX-записи.

Однако в реальности с переносом почты могут возникнуть трудности: например при переносе в облачный сервис нет прямого доступа к диску, и может не быть удобных средств миграции. В этом случае может выручить утилита imapsync, о которой и пойдёт речь далее.

Логотип утилиты 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.

Настройка безопасности приложений в GSuite

После этого остаётся написать небольшой скрипт, который последовательно выполнит 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. Однако в силу ряда причин у автора этих строк не было возможности протестировать этот функционал.

На этом всё. Приятной работы!

Ключевые слова: imap, imapsync, google, gsuite, google suite, миграция.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Anonymous 2019-01-28 09:51:39 (#)

Спасибо.

Anonymous 2019-08-22 21:35:26 (#)

Спасибо за хорошую статью.
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности