Синхронизация почты с помощью ImapSync
Тут нам вполне способен помочь ImapSync. Как видно из названия эта утилита предназначена для синхронизации почтовых папок по протоколу IMAP.
imapsync —host1 server1 —user1 user1 —password1 password1 —host2 server2 —user2 user2 —password2password2
- server1 — сервер с которого забираем почту
- user1, password1 — учетные данные пользователя на сервере источнике
- server2 — сервер на который копируем почту
- user2, password2 — учетные данные пользователя на сервере приемнике
И так пятьдесят раз. Не хочется? Тогда пишем скрипт!
Предполагаем, что учетные данные пользователей на обоих серверах совпадают, скрипт запускается на сервере приемнике, учетные данные лежат в базе MySQL, для написания скрипта используется Perl.
#! /usr/bin/perl
#Параметры 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;
Если нужно исключить из синхронизации некоторые папки в почтовом ящике используем ключ —exclude, если не нужны письма старше N дней, добавляем —maxage. Например
$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
А если использовать самый простой браузер, а в нем есть такой сайт… эх… как же его… ах ну да! Mail.ru или даже yaandex.ru
корпоративную почту тоже можно к ним привязать!