Imapsync. Mailboxes transfer
Description
Imapsync. Mailboxes transfer from one mail service to another using IMAP. Almalinux 8.
Links
https://habr.com/ru/post/282916/
https://www.srv24x7.com/cant-locate-lazy-pm-in-inc-you-may-need-to-install-the-lazy-module/
Installation
Utils
dnf install -y wget perl-App-cpanminus gcc perl-libwww-perl perl-IO-Socket-INET6
cpanm lazy Test::MockObject
Download imapsync
wget https://imapsync.lamiral.info/imapsync
perl -Mlazy imapsync
chmod +x imapsync
Test
./imapsync --testslive
./imapsync --tests
Example
.\imapsync.exe ^
--host1 mx.example.ru --user1 user@example.ru --password1 "Pass123" ^
--host2 imap.yandex.ru --user2 user@example.biz --password2 "Pass123" ^
--ssl1 --ssl2 --sslargs1 SSL_verify_mode=0 --sslargs2 SSL_verify_mode=1 --skipheader "^(?!Message-Id)" --automap ^
--regextrans2 "s/^INBOX\.(.+)/$1/" --justfolders --dry
Parameters description
Server-source, login, password:
--host1 mx.example.ru --user1 user --password1 "Pass123"
Server-destination, login, password:
--host2 imap.yandex.ru --user2 user@example.biz --password2 "Pass123"
Using SSL for source and destination servers:
--ssl1 --ssl2
Cert check mode for SSL ON.
Accept any cert (=0), OR check суке authenticity (=1).
--sslargs1 SSL_verify_mode=0 --sslargs2 SSL_verify_mode=1
Заметил, что если не указать эти настройки, то могут появлятся ошибки при переносе некоторых писем, или появление ошибки такого рода:
Use of uninitialized value $sockargs[9] in join or string at Mail/IMAPClient.pm line 360.
Игнорировать все заголовки в письме, кроме тех, что содержат «Message-Id». Этот параметр полезен в тех случаях, когда для одного письма на разных серверах генерируются разные заголовки, в моем случае они отличались. Яндекс для каждого письма добавлял одну дополнительную строчку, из-за чего письма дублировались при каждом последующем переносе почты. Если фильтровать заголовки по «Message-Id», то при каждом переносе почты, копируются только новые письма.
--skipheader "^(?!Message-Id)"
Автоматически определить и привязать папки на сервере источника к папкам на сервере назначения. Сама сравнивает названия и создает привязки, поддерживает папки с кириллицей в названиях. Inbox-> Входящие. Sent -> Отправленные…
--automap
Удаляет из названия INBOX во всех папках назначения. В моем случае IDECO все папки называет начиная с INBOX (INBOX.Sent, INBOX.Drafts и т.п.). Чтобы не создавать двойные названия в сервере назначения для папок, которые были созданы пользователем вручную. Тут стоит заметить, что это еще зависит от сервера.
--regextrans2 "s/^INBOX\.(.+)/$1/"
Выполнять операции только для папок. Письма не переносятся.
--justfolders
Эмуляция выполнения. Будет показан весь план работ, но физически ничего не переносится. Удобно для тестирования.
--dry
Transfer from YANDEX/MAIL.RU to the own private mail server POSTFIX
YANDEX
It's necessary to turn ON Imap protocol and Portal password in the Yandex mailbox settings
./imapsync --host1 imap.yandex.ru --user1 d.tmb.it@yandex.ru --password1 'PassWord#1' --host2 mail.don661.ru --user2 test@don661.ru --password2 'PassWord#2' --ssl1 --ssl2 --sslargs1 SSL_verify_mode=0 --sslargs2 SSL_verify_mode=1 --automap --regextrans2 "s/^INBOX\.(.+)/$1/" --nosslcheck
MAIL.RU
It's necessary to add App Password and to use this App Password as Login/AppPassword (in the example below: 'hB1mgJaJGN5uvX5mPcqc'). In order to do it you have to bind your mobile number to mail.ru account
./imapsync --host1 imap.mail.ru --user1 stolovaya.navysote@mail.ru --password1 'hB1mgJaJGN5uvX5mPcqc' --host2 mail.middledeep.ru --user2 stolovaya.navysote@middledeep.ru --password2 '45t45t43t' --ssl1 --ssl2 --sslargs1 SSL_verify_mode=0 --sslargs2 SSL_verify_mode=1 --automap --regextrans2 "s/^INBOX\.(.+)/$1/" --nosslcheck
GOOGLE MAIL
It's necessary to add 2FA (via Mobile Number) and App Password (in the 2FA Section after adding 2FA) and to use this App Password as GMAIL-Login/AppPassword
./imapsync --host1 imap.gmail.com --user1 8800mosk@gmail.com --password1 '<App-Password>' --host2 mail.middledeep.ru --user2 8800mosk@middledeep.ru --password2 'PassWord#1' --ssl1 --ssl2 --sslargs1 SSL_verify_mode=0 --sslargs2 SSL_verify_mode=1 --automap --regextrans2 "s/^INBOX\.(.+)/$1/" --nosslcheck