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

Перенос почты с 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