Прехвърляне на поща между услуги, използващи IMAP Sync

Понякога администраторите трябва да прехвърлят пощенския сървър: или на друг хардуер, или дори на някаква облачна услуга. Задачата обикновено изглежда проста: акаунти се създават за всички потребители на новото място, след това пощата се копира и MX записите накрая се коригират.

В действителност обаче прехвърлянето на поща може да бъде трудно: например при прехвърляне в облачна услуга няма директен достъп до диска и може да няма удобни средства за миграция. В този случай полезната програма Imapsync може да ви помогне , което ще бъде разгледано по-нататък.

Прехвърляне с 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.

След това остава да напишем малък скрипт, който последователно да изпълнява 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. 

Вашият коментар