Добро пожаловать на форум, Гость!
Войдите или зарегистрируйтесь!
Имя пользователя:   Пароль:  
Запомнить меня 




Начать новую тему Ответить на тему   [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Скрипт для imapsync
СообщениеДобавлено: 29 май 2012, 12:31 
Бородатый сис
Аватар пользователя
Статус: Не в сети

GeoIP: Kyrgyzstan

Сообщений: 2902
Откуда: Из серверной
Зарегистрирован: 03 мар 2010, 15:12
Благодарил (а): 19 раз.
Поблагодарили: 122 раз.
ОС: RHEL 6.7
Понадобилось мне перенести мейлдиры пользователей 1 почтаря на другой. Надергал из базы список пользователей, собирался натравить на него tar, но после того как сделал
Код:
# cat mb.list | wc -l

я честно охренел - записей было > 3000 и во всех мейлдирах естессно лежат мелкиме файлы!!! В довесок к этому на старом почтаре крутился Courier а на новом Dovecot2 и для преобразования индексов maildir'а мне предстояло проделать это. Нарисовался повод почесать репу... Чес репо дал свои результаты - /usr/ports/mail/imapsync.

Почитав немного доков я убедился что это как раз мой случай - засинкать содержимое мейлдир посредством синхронизации imap-серверов. Но вот вводить каждый раз имя пользователя и пароли мне как-то не сильно улыбалось. В итоге удалось нагуглить замечательный скрипт синхронизирующий 2 сервера посредством логинов и паролей изьятых из базы данных (у меня пароли хранятся в plaintext'е, так что с декриптом париться тоже не пришлось). Вот сие творение чьего-то гения:

Синтаксис: [ Загрузить ] [ Скрыть ]
Используется подсветка синтаксиса perl
#! /usr/bin/perl
# Параметры подключения к БД
 $dbuser = 'mail';
 $dbpass = 'mail_user_password';
 $db = 'mail';
 $dbhost = 'localhost';

 $domain = 'domain1.tld';
 $server = 'mail.domain1.tld';
 $server1 = 'mail.domain2.tld';
 $domain1 = 'domain2.tld'; # Можно оставить domain1.tld, в этом случае в обоих серверах будут синхронизироваться папки пользователей одного домена - полезно например при переезде на новый сервер

 use DBI;
 $query = 'SELECT name, password FROM mailbox WHERE domain=\''.$domain.'\''; # Подгоняем запрос под свою таблицу с пользователями

 $dbh = DBI->connect("DBI:Pg:database=$db;host=$dbhost",$dbuser, $dbpass) || die print "Can't connect"; # "DBI:Pg" как наверное уже стало всем понятно используется при подключении к Postgresql. Для MySQL следует использовать "DBI:mysql"

 $sth = $dbh->prepare(qq{$query});
 $sth -> execute;

 while (my ($m_user, $m_pass) = $sth->fetchrow_array())
         {
 $user1=$m_user.'@'.$domain;
 $user2=$m_user.'@'.$domain1;
         print "Syncronize mail for ".$user2."\n";
 $r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --host2 $server1 --user2 $user2 --password2 $m_pass`;

 }
 $sth->finish();
 $dbh->disconnect();
 exit;
Обработано за 0.008 секунд, используется GeSHi 1.0.8.4


Ставим все необходимое:
Код:
# make -C /usr/ports/mail/imapsync install clean
...
# make -C /usr/ports/databases/p5-Class-DBI-Pg install clean


Запускаем наш скрипт:
Код:
# ./imaps.sh


И наслаждаемся синхронизацией.

Да, чуть не забыл - поскольку синхронизация происходит по протоколу imap преобразования индексов не потребовалось - dovecot сразу создал свои индексы.


Я не злопамятный, я просто часто ковыряю логи
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 
   Похожие темы   Автор   Ответов   Просмотров   Последнее сообщение 
Перенесенная ^_^

в форуме Linux

root

3

38

02 мар 2010, 16:15

Gen1us2k Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Опубликован пакетный менеджер GNU Guix 0.12 и дистрибутив...

в форуме Новости *nix

[Ботя]

0

340

23 дек 2016, 13:30

Гость Перейти к последнему сообщению

Нет новых непрочитанных сообщений в этой теме Релиз http-сервера Apache 2.4.25

в форуме Новости *nix

[Ботя]

0

443

24 дек 2016, 14:30

Гость Перейти к последнему сообщению



Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Собрано Raven. Русская поддержка phpBB
phpBB SEO