Периодически возникают задачи по переносу данных с хостингов, где используются странные и самописные панели, с чьих резервных копий (если таковые делаются) ISPmanager не умеет импортировать данные.
Если с базами данных, файлами сайтов никаких вопросов не возникает, то перенос писем из ящиков оказывается невозможным.
Но тут на помощь приходит приложение imapsync.
К сожалению, в Debian 7 wheezy этого пакета нет, поэтому пришлось устанавливать вручную.
apt-get update && apt-get upgrade apt-get install make libdate-manip-perl libterm-readkey-perl libterm-readkey-perl libdigest-hmac-perl libdigest-hmac-perl libdate-manip-perl libmail-imapclient-perl makepasswd rcs perl-doc git cd /tmp git clone git://github.com/imapsync/imapsync.git cd imapsync sh examples/install_modules_linux.sh make install
После этих команд в директории /tmp/imapsync получаем бинарный файл imapsync
Далее требуется создать почтовые ящики на локальном сервере. После того, как ящики будут созданы, переходим непосредственно к переносу данных.
Помещаем список почтовых ящиков с паролями (в формате ящик:пароль) в файл и используем такой скрипт
#!/bin/bash
for EMAIL in `cat mailbox.txt`
do
NAME=`echo $EMAIL|awk -F: '{print $1}'`
PASS=`echo $EMAIL|awk -F: '{print $2}'`
./imapsync --host1 <remotehost> --user1 $NAME --password1 $PASS --host2 <localhost> --user2 $NAME --password2 $PASS
doneгде:
- <remotehost> — удаленный IMAP-сервер
- <localhost> — локальный IMAP-сервер
После этого даем права на исполнение этому скрипту и запускаем.
В случае, если все пошло правильно, на экран будет выводится похожая информация.
Transfer started at Fri Aug 1 12:03:22 2014
PID is 21291
Log file is LOG_imapsync/2014_08_01_12_03_22_EMAIL.ru.txt
$RCSfile: imapsync,v $ $Revision: 1.592 $ $Date: 2014/05/22 10:03:17 $
Here is a [linux] system (Linux hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64)
With perl 5.14.2 Mail::IMAPClient 3.35
Command line used:
./imapsync --host1 <remotehost> --user1 EMAIL --password1 MASKED --host2 localhost --user2 EMAIL --password2 MASKED
Temp directory is /tmp
PID file is /tmp/imapsync.pid
Modules version list:
Mail::IMAPClient 3.35
IO::Socket 1.32
IO::Socket::IP ?
IO::Socket::INET 1.31
IO::Socket::SSL 1.997
Net::SSLeay 1.48
Digest::MD5 2.51
Digest::HMAC_MD5 1.01
Digest::HMAC_SHA1 1.03
Term::ReadKey 2.30
Authen::NTLM 1.09
File::Spec 3.33
Time::HiRes 1.972101
URI::Escape 3.31
Data::Uniqid 0.12
Info: turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
Info: will try to use LOGIN authentication on host1
Info: will try to use LOGIN authentication on host2
Info: imap connexions timeout is 120 seconds
Host1: IMAP server [<remotehost>] port [143] user [EMAIL]
Host2: IMAP server [localhost] port [143] user [EMAIL]
Host1: * OK IMAP4 ready
Host1: <remotehost> says it has CAPABILITY for AUTHENTICATE LOGIN
Host1: success login on [<remotehost>] with user [EMAIL] auth [LOGIN]
Host2: * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=LOGIN AUTH=DIGEST-MD5 AUTH=CRAM-MD5] Dovecot ready.
Host2: localhost says it has CAPABILITY for AUTHENTICATE LOGIN
Host2: success login on [localhost] with user [EMAIL] auth [LOGIN]
Host1: state Authenticated
Host2: state Authenticated
Host1 capability: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS QUOTA
Host2 capability: IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS SPECIAL-USE QUOTA
Host1: separator given by NAMESPACE: [.]
Host2: separator given by NAMESPACE: [.]
Host1: prefix given by NAMESPACE: []
Host2: prefix given by NAMESPACE: []
Host1 separator and prefix: [.][]
Host2 separator and prefix: [.][]
++++ Calculating sizes on Host1
Host1 folder [Drafts] Size: 0 Messages: 0 Biggest: 0
Host1 folder [INBOX] Size: 1361996 Messages: 48 Biggest: 473331
Host1 folder [Sent] Size: 64145689 Messages: 165 Biggest: 415339
Host1 folder [Spam] Size: 826150 Messages: 2 Biggest: 413658
Host1 folder [Trash] Size: 0 Messages: 0 Biggest: 0
Host1 Nb messages: 215 messages
Host1 Total size: 66333835 bytes (63.261 MiB)
Host1 Biggest message: 473331 bytes (462.237 KiB)
Host1 Time spent: 0.7 seconds
++++ Calculating sizes on Host2
Host2 folder [Drafts] does not exist yet
Host2 folder [INBOX] Size: 0 Messages: 0 Biggest: 0
Host2 folder [Sent] does not exist yet
Host2 folder [Spam] does not exist yet
Host2 folder [Trash] does not exist yet
Host2 Nb messages: 0 messages
Host2 Total size: 0 bytes (0.000 KiB)
Host2 Biggest message: 0 bytes (0.000 KiB)
Host2 Time spent: 0.0 seconds
++++ Listing folders
Host1 folders list:
[Drafts]
[INBOX]
[Sent]
[Spam]
[Trash]
Host2 folders list:
[INBOX]
Folders in host2 not in host1:
++++ Looping on each folder
[Drafts] -> [Drafts]
Creating folder [Drafts] on host2
Created folder [Drafts] on host2
Subscribing to folder Drafts on destination server
[INBOX] -> [INBOX]
Subscribing to folder INBOX on destination server
msg INBOX/4 {473331} copied to INBOX/1 0.75 msgs/s 345.925 KiB/s ETA: Fri Aug 1 12:08:12 2014 286 s 214 msgs left
msg INBOX/5 {31368} copied to INBOX/2 1.38 msgs/s 339.223 KiB/s ETA: Fri Aug 1 12:06:00 2014 155 s 213 msgs left
msg INBOX/6 {37529} copied to INBOX/3 1.92 msgs/s 338.099 KiB/s ETA: Fri Aug 1 12:05:16 2014 111 s 212 msgs leftА если что-то пошло не так и никак не получается перенести почту, всегда можете воспользоваться моими услугами. Контакты есть справа.
Клип на новую песню «Архивы» от Неизвестного исполнителя — Алексея Каюкова
У меня есть телеграм-канал, где я пишу чуть чаще и менее формально 🙂 Подписывайся!
Перенос писем с помощью imapsync

Хороша статья! Автор молодец!
Но есть пара ошибок (может в последних версиях такое).
Кароче после исполнения sh examples/install_modules_linux.sh
все вроде ровно, но при выполнении make install получил в выводе ошибку:
Can’t locate Unicode/String.pm (……блаблабла….)
Решается просто:
пишем в консоли cpan, попадаем в консоль cpan с приглашением ввода команды.
дальше пишем install Unicode::String и все. ждем пока поставится. потом exit для выхода назад в нашу консоль. и дальше по тексту.
И еще если у вас сервера работают через SSL, то в скрипте надо написать вот так (для обоих с ссл):
./imapsync —host1 —ssl1 —user1 $NAME —password1 $PASS —host2 —ssl2 —user2 $NAME —password2 $PASS
Для TLS аналогично.