![imapsync logo](https://imapsync.lamiral.info/S/images/logo_imapsync.png)
При смене почтового сервера первый вопрос который возникает — каким образом можно сохранить все письма и перенести их на новый сервер? В решении данной задачи вам поможет утилита 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
![](https://blog.unixhost.pro/wp-content/uploads/2022/02/image.png)
Для того чтобы упростить работу с утилитой, разработчик сделал простой и понятный веб интерфейс. Для того чтобы вебинтерфейс заработал, необходимо скопировать утилиту в папку cgi-bin и убедиться, что пользователь веб-сервера имеет доступ к данному файлу. Если же вы копировали файл от root пользователя то перейдите в папку в которую вы произвели копирование и выполните следующую команду
chown admin:admin imapsync
admin — имя пользователя и группа от которого запускается веб-интерфейс
![](https://blog.unixhost.pro/wp-content/uploads/2022/02/image-1.png)
Если вы используете панель управления HestiaCP то папка cgi-bin будет находится у вас в папке с доменным именем, рядом с папкой public_html.
Перенос почты на новый сервер
Мы будем переносить почту с сервера server1 на server 2. В данный момент папка входящей почты на server1 вы глядит следующим образом.
![](https://blog.unixhost.pro/wp-content/uploads/2022/02/image-3.png)
А папка входящей почты server2 вот так
![](https://blog.unixhost.pro/wp-content/uploads/2022/02/image-4.png)
Для переноса воспользуемся вебинтерфейсом утилиты. В поле IMAP source Mailbox введем данные server1, а в IMAP destination Mailbox данные от сервера на который мы будем переносить, в нашем случаи это server2. Пример заполнения вы можете увидеть на фото ниже.
![](https://blog.unixhost.pro/wp-content/uploads/2022/02/image-5.png)
Для запуска переноса нажимаем на Sync or resync!
После успешной синхронизации папка входящих сообщений на server2 будет выглядеть также как и на server1
![](https://blog.unixhost.pro/wp-content/uploads/2022/02/image-6.png)