Иногда встаёт вопрос о переносе почтового сервера с одного хостинга на другой ну или Вы решили перенести свои почтовые ящики например на yandex, mail, google или другие сервисы. Но как же быть с письмами которые уже есть в ваших ящиках и их нужно обязательно сохранить. В этом нам поможет очень полезная утилита Imapsync. Для установки нам понадобится установленный, либо на виртуальную машину или на стационарный ПК, ubuntu server

Для начало переводим пользователя в сессию под root-ом

user@imapsync:~$ sudo -i

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

root@imapsync:~# apt update && apt upgrade -y

Установим зависимости для imapsync

root@imapsync:~# apt install 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 libdist-checkconflicts-perl libpar-packer-perl libtest-fatal-perl libtest-modern-perl libtest-requires-perl libtest-mock-guard-perl libproc-processtable-perl make time cpanminus git -y

root@imapsync:~# apt-get install apt-file -y

root@imapsync:~# apt-file update

Перейдем в директорию OPT

root@imapsync:~# cd /opt

Скачиваем пакета imapsync с github

root@imapsync:/opt# git clone https://github.com/imapsync/imapsync.git

Далее переходим в директорию imapsync

root@imapsync:/opt# cd imapsync/

Установим пакет imapsync

root@imapsync:/opt/imapsync# make

root@imapsync:/opt/imapsync# make testp

root@imapsync:/opt/imapsync# make install

Примеры переноса писем из одного ящика в другой

./imapsync \

–host1 imap.yandex.ru \

–user1 info@example.com \

–password1 “Pa$$word1 \

–host2 mail.example.com \

–user2 info@example.com \

–password2 “Pa$$word1

Но как быть если нужно перенести 10, 20 ну или 400+ ящиков 🤔
В этом нам поможет встроенный скрипт sync_loop_unix.sh. Скрипт расположен в директории /opt/imapsync/examples

Перейдем в директорию 

root@imapsync:/opt/imapsync# cd examples/

Сам скрипт

root@imapsync:/opt/imapsync/examples# nano sync_loop_unix.sh


echo Looping on accounts credentials found in file.txt
echo
line_counter=0
Empty the error listing
> file_failures.txt
{ while IFS=’;’ read h1 u1 p1 h2 u2 p2 extra fake
do
line_counter=`expr 1 + $line_counter`
{ echo “$h1” | tr -d ‘\r’ | egrep ‘^#|^ *$’ ; } > /dev/null && continue # thi>
echo “==== Starting imapsync with –host1 $h1 –user1 $u1 –host2 $h2 –user2>
if imapsync –host1 “$h1” –user1 “$u1” –password1 “$p1” \
–host2 “$h2” –user2 “$u2” –password2 “$p2” $extra “$@”
then
echo “success sync for line $line_counter “
else
echo “$h1;$u1;$p1;$h2;$u2;$p2;$extra;” | tee -a file_failures.txt
fi
echo “==== Ended imapsync with –host1 $h1 –user1 $u1 –host2 $h2 –user2 $u>
echo
done
} < file.txt

Углубляться в сам скрипт не буду скажу только то что он обращается к файлу file.txt  который находится в этой же директории далее будем редактировать этот файл.

root@imapsync:/opt/imapsync/examples# nano file.txt

imap.yandex.ru;info@example.com;Pa$$word1;mail.@example.com;info@example.com;Pa$$word1;–automap;–addheader;

imap.yandex.ru;admin@example.com;Pa$$word2;mail.@example.com;admin@example.com;Pa$$word2;–automap;–addheader;

imap.yandex.ru;office@example.com;Pa$$word3;mail.@example.com;office@example.com;Pa$$word3;–automap;–addheader;

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

root@imapsync:/opt/imapsync/examples# ./sync_loop_unix.sh

После завершения процедуры миграции осталось только проверить все ли письма правильно перенеслись

Так же можно посмотреть логи по выполнению миграции. для каждого почтового ящика формируется свой лог файл.

root@imapsync:/opt/imapsync/examples# ls LOG_imapsync/

Атрибуты imapsync

  • –host1(2)   доменное имя (или ip адрес) почтового сервера
  • –user1(2)   имя почтового ящика
  • –password1(2)  пароль от почтового ящика (или пароль приложения для yandex, mail, google и т.д.)
  • –ssl   Проверка сертификата SSL
  • –automap    угадывает сопоставление папок для папок, хорошо известных как “Отправленные”, “Нежелательная почта”, “Черновики”, “Все”, “Архив”, “Помеченные”.
  • –addheader   Когда у сообщения нет заголовков, которые нужно идентифицировать, –addheader добавляет заголовок “Message-Id”, например “Message-Id: 12345@imapsync”, где 12345 – это imap UID сообщения в папке host1. Полезно синхронизировать папки “Отправлено” или “Черновик”.
  • –exclude  Пропускает папки  пример (–exclude ‘Spam|Trash|Draft’)

Более подробно ознакомится с атрибутами можно по ссылке