При смене почтового сервера первый вопрос который возникает — каким образом можно сохранить все письма и перенести их на новый сервер? В решении данной задачи вам поможет утилита 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