yandex

Сибирь. Сабынич. Айти

о природе, личной жизни и информационных технологиях

Перенос писем с помощью imapsync

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

Один комментарий к “Перенос писем с помощью imapsync

  1. Хороша статья! Автор молодец!
    Но есть пара ошибок (может в последних версиях такое).
    Кароче после исполнения 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 аналогично.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Пролистать наверх