Перенос писем с помощью 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
А если что-то пошло не так и никак не получается перенести почту, всегда можете воспользоваться моими услугами. Контакты есть справа.
Клип на новую песню «Архивы» от Неизвестного исполнителя — Алексея Каюкова

Другие публикации по теме:

Обновление phpMyAdmin, проблемы с безопасностью... Уже практически неделю буйствует эпидемия среди серверов на базе Linux, вызванная проблемой с безопасностью в phpMyAdmin, о которой можно прочесть в р...
Как настроить журналируемую квоту на Debian Lenny... Автор: Falko Timme Это руководство научит вас настраивать журналируемую квоту на системе Debian Lenny. Благодаря журналируе...
Стабильное обновление Manjaro Linux 2016-09-20 ... На этой неделе сообществу Manjaro Linux был представлен очередной пакет обновлений. В него включили KDE Framework 5.26. Ядро Linux 4.8 будет представл...
John The Ripper, файл паролей Есть такая утилита для подбора паролей (Мало ли, забылся пароль от секретного архива, или решил проверить свои пароли на вероятность взлома) под назва...

Поделиться информацией с друзьями!

Чтобы не пропустить обновления, подпишись на RSS или почтовую рассылку (свой выбор сделали уже 128 человек!)

Один комментарий к «Перенос писем с помощью 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 аналогично.

Оставить комментарий