fbpx
Перейти к содержимому

Перенос почты с imapsync

imapsync logo

При смене почтового сервера первый вопрос который возникает — каким образом можно сохранить все письма и перенести их на новый сервер? В решении данной задачи вам поможет утилита imapsync.

imapsync позволяет синхронизировать содержимое почтового сервера с сохранением статуса писем «прочитанное, не прочитанное, удаленное», сохраняет структуру папок, не переносим письма которые уже есть на удаленном сервере, поддерживает восстановление синхронизации при обрыве связи и хорошо работает даже на нестабильном канале связи.

Написана утилита на языке Perl и может быть запущена практически на любой операционной системе. Отдельной особенностью imapsync является то, что у вас нет необходимости запускать ее на сервере на который вы собираетесь синхронизировать почту, либо на сервере с которого будет производится синхронизация, запустить утилиту вы можете даже с личного компьютера.

Установка imapsync

Установка imapsync Debian

Обновим все доступные пакеты

sudo apt update
sudo apt -y upgrade

Установим необходимы пакеты для работы утилиты

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://raw.githubusercontent.com/imapsync/imapsync/master/imapsync
chmod +x imapsync

Запустим и проверим установлены ли все зависимости

./imapsync --testslive

Для удобства использования утилиты перенесем ее в директорию /usr/local/bin

cp imapsync /usr/local/bin/

В случаи если вам будет необходимо использовать OAuth 2.0 необходимо будет установить XOAUTH2

sudo cpanm JSON::WebToken

Установка imapsync Ubuntu

Устанавливаем необходимые пакеты для работы утилиты

sudo apt-get install  \
libauthen-ntlm-perl     \
libclass-load-perl      \
libcrypt-ssleay-perl    \
libdata-uniqid-perl     \
libdigest-hmac-perl     \
libdist-checkconflicts-perl \
libencode-imaputf7-perl     \
libfile-copy-recursive-perl \
libfile-tail-perl       \
libio-compress-perl     \
libio-socket-inet6-perl \
libio-socket-ssl-perl   \
libio-tee-perl          \
libmail-imapclient-perl \
libmodule-scandeps-perl \
libnet-dbus-perl        \
libnet-ssleay-perl      \
libpar-packer-perl      \
libreadonly-perl        \
libregexp-common-perl   \
libsys-meminfo-perl     \
libterm-readkey-perl    \
libtest-fatal-perl      \
libtest-mock-guard-perl \
libtest-mockobject-perl \
libtest-pod-perl        \
libtest-requires-perl   \
libtest-simple-perl     \
libunicode-string-perl  \
liburi-perl             \
libtest-nowarnings-perl \
libtest-deep-perl       \
libtest-warn-perl       \
make                    \
cpanminus

Скачиваем файл утилиты и устанавливаем утилите права на запуск

wget -N https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync
chmod +x imapsync

Если получаем следующий текст, значит все установлено верно

# Entering tests_live_result()
Live tests ended successfully

Для удобства использования утилиты перенесем ее в директорию /usr/local/bin

cp imapsync /usr/local/bin/

В случаи если вам будет необходимо использовать OAuth 2.0 необходимо будет установить XOAUTH2

sudo cpanm JSON::WebToken

Установка imapsync Centos

Установка imapsync Centos 8
dnf install wget perl-App-cpanminus gcc
cpanm lazy Test::MockObject
wget https://imapsync.lamiral.info/imapsync
perl -Mlazy imapsync
chmod +x imapsync

Для проверки правильности установки выполняем команду

./imapsync --testslive
Установка imapsync Centos 7
yum install epel-release
yum install imapsync

Для проверки установки выполняем команду

imapsync --tests

Установка imapsync MacOS

brew install imapsync

Для проверки установки выполняем команду

imapsync --testslive

Пример использования imapsync

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

Для демонстрации работы утилиты я создал два тестовых сервера, почтовый аккаунт старого сервера у нас будет называться server1, а почтовый аккаунт сервера на который мы будем переносить будет server2.

Для того чтобы синхронизировать почту выполняем следующую команду

imapsync \
       --host1 server1.oldmail.com --user1 [email protected] --password1 server1password \
       --host2 server2.newmail.com --user2 [email protected] --password2 server2password

Подробнее разберем данную команду:

  • server1.oldmail.com — доменное имя нашего старого почтового сервера
  • [email protected] — почтовый ящик который мы переносим
  • server1password — пароль от почтового ящика [email protected]
  • server2.newmail.com -доменное имя нашего нового почтового сервера
  • [email protected] — почтовый ящик на который мы переносим все письма с нашего старого ящика
  • server2password — пароль от нашего нового почтового ящика

Для того чтобы не передавать в терминал пароли от почтовых ящиком, вместо —password1 и —password2 можно использовать —passfile1 и —passfile2 в таком случаи вместо пароля необходимо указать путь к файлу в котором будет находится пароль.

В imapsync доступны дополнительные параметры

  • —delete1 — удалением всех писем и папок с сервера источника
  • —delete2 — удалением писем, которых нет на сервере источнике, с сервера на который переносится почта. Полезно при пересинхронизации почтовых аккаунтов
  • —maxsize — пропускать синхронизацию писем которые превышают заданный размер
  • —minsize — не синхронизировать письма которая меньше заданного размера
  • —folder — синхронизация определенной директории
  • —maxage — не синхронизировать письма которые пришли раньше чем указанное количество дней. По такому же принципу работает команда —minage

Это только небольшая часть параметров которые доступны в утилите imapsync . С полным списком параметров вы можете ознакомиться на данной странице в GitHub репозитории imapsync.

Вебинтерфейс imapsync

Для того чтобы упростить работу с утилитой, разработчик сделал простой и понятный веб интерфейс. Для того чтобы вебинтерфейс заработал, необходимо скопировать утилиту в папку cgi-bin и убедиться, что пользователь веб-сервера имеет доступ к данному файлу. Если же вы копировали файл от root пользователя то перейдите в папку в которую вы произвели копирование и выполните следующую команду

chown admin:admin imapsync

admin — имя пользователя и группа от которого запускается веб-интерфейс

Если вы используете панель управления HestiaCP то папка cgi-bin будет находится у вас в папке с доменным именем, рядом с папкой public_html.

Перенос почты на новый сервер

Мы будем переносить почту с сервера server1 на server 2. В данный момент папка входящей почты на server1 вы глядит следующим образом.

А папка входящей почты server2 вот так

Для переноса воспользуемся вебинтерфейсом утилиты. В поле IMAP source Mailbox введем данные server1, а в IMAP destination Mailbox данные от сервера на который мы будем переносить, в нашем случаи это server2. Пример заполнения вы можете увидеть на фото ниже.

Для запуска переноса нажимаем на Sync or resync!

После успешной синхронизации папка входящих сообщений на server2 будет выглядеть также как и на server1