При замене почтового сервера возникает задача по переносу почты со старого сервера на новый. Если оба сервера работают под Linux, то проблем нет, берем и копируем содержимое /var/spool/mail на новую железку любым доступным способом и вперед. А что делать если, например, нужно переехать с Microsoft Exchange на Exim, или наоборот?
Тут нам вполне способен помочь ImapSync. Как видно из названия эта утилита предназначена для синхронизации почтовых папок по протоколу IMAP.
Для синхронизации одного ящика выполняем:
Предполагаем, что учетные данные пользователей на обоих серверах совпадают, скрипт запускается на сервере приемнике, учетные данные лежат в базе MySQL, для написания скрипта используется Perl.
Имеется еще несколько замечательных ключиков, подробнее смотрим
Тут нам вполне способен помочь ImapSync. Как видно из названия эта утилита предназначена для синхронизации почтовых папок по протоколу IMAP.
Для синхронизации одного ящика выполняем:
imapsync --host1 server1 --user1 user1 --password1 password1 --host2 server2 --user2 user2 --password2 password2Здесь:
- server1 - сервер с которого забираем почту
- user1, password1 - учетные данные пользователя на сервере источнике
- server2 - сервер на который копируем почту
- user2, password2 - учетные данные пользователя на сервере приемнике
Предполагаем, что учетные данные пользователей на обоих серверах совпадают, скрипт запускается на сервере приемнике, учетные данные лежат в базе MySQL, для написания скрипта используется Perl.
#! /usr/bin/perlЕсли нужно исключить из синхронизации некоторые папки в почтовом ящике используем ключ --exclude, если не нужны письма старше N дней, добавляем --maxage. Например
#Параметры MySql
$dbuser = 'user';
$dbpass = 'password';
$db = 'database';
$dbhost = 'localhost';
$domain = 'domain.ru';
#Параметры Exchange
$server = '192.168.0.123';
$domain1 = 'domain.local';
use DBI;
#Создаем SQL запрос
#login - логин пользователя без указания домена (например vova)
#decrypt - пароль почтового ящика в открытом виде
#domain - почтовый домен пользователя (domain.ru)
#status - признак активности пользователя
$query = 'SELECT login, decrypt FROM users WHERE domain=\''.$domain.'\' AND status=\'1\'';
#Подключаемся к базе данных
$dbh = DBI->connect("DBI:mysql:database=$db;host=$dbhost",$dbuser, $dbpass) || die print "Can't connect";
#Выполняем SQL запрос
$sth = $dbh->prepare(qq{$query});
$sth -> execute;
# Выполняем синхронизацию
# делать выборку данных
# пока ничего не останется
while (my ($m_user, $m_pass) = $sth->fetchrow_array())
{
$user1=$m_user.'@'.$domain1;
$user2=$m_user.'@'.$domain;
#Сообщаем, над каким ящиком трудимся в данный момент
print "Syncronize mail for ".$user2."\n";
$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --host2 $dbhost --user2 $user2 --password2 $m_pass`;
}
$sth->finish();
$dbh->disconnect();
exit;
$r_sync=`imapsync --host1 $server --user1 $user1 --password1 $m_pass --exclude 'spam' --maxage 10 --host2 $dbhost --user2 $user2 --password2 $m_pass`;В этом случае не будут синхронизироваться папки с именем spam и сообщения старше 10 дней.
Имеется еще несколько замечательных ключиков, подробнее смотрим
perldoc imapsync
Комментариев нет:
Отправить комментарий