Иногда встаёт вопрос о переносе почтового сервера с одного хостинга на другой ну или Вы решили перенести свои почтовые ящики например на 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’)
Более подробно ознакомится с атрибутами можно по ссылке