Периодически возникают задачи по переносу данных с хостингов, где используются странные и самописные панели, с чьих резервных копий (если таковые делаются) 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 аналогично.