- Регистрация
- 21.07.20
- Сообщения
- 40.408
- Реакции
- 1
- Репутация
- 0
В этой статье будет рассмотрен способ переноса почты между разными серверами с помощью утилиты IMAPSync через примитивный интерфейс пользователя.
На сервере назначения необходимо иметь ящик с нужным логином и паролем. Перед использованием Imapsync нужно обязательно установить его (
По причине запрета организацией использовать пароли от почтовых ящиков сотрудников в скрипте процесс миграции передаем пользователю. Для этого разработан web-интерфейс пользователя, который состоит из модуля формы (gis.html) и модуля запуска скрипта imapsync (gis.php). Заполнение серверов imap можно автоматизировать анализируя содержимое поля с названием почтового ящика. Использование Fetchmail как плагина roundcube не рассматривается, т.к. мною не был найден подробный связный разбор этого вопроса.
Web-интерфейс состоит из полей с информацией о почтовых ящиках, области вывода выполнения операции и кнопок управления (gis.html).
Миграция почтового ящика
[TD]
[TD]
Пароль:
[TD]
[TD]
IMAP сервер:
[/TD]
[TD]
[TR][TD]
Конечный почтовый ящик:
[/TD]
[TD]
[TD]
Пароль:
[TD]
[TD]
IMAP сервер:
[/TD]
[TD][/TD]
[/TD]
[/TD]
[/TD]
[/TD]
[/TD]
[/TD]
[/TD] [/TR][TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD]
Результат выполнения:
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD][/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD][/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD]
Модуль запуска скрипта imapsync (gis.php).
event-stream');
header('Cache-Control: no-cache');
//вывод в область сообщений
function echoEvent($datatext) {
echo "data: ".implode("\ndata: ", explode("\n", $datatext))."\n\n";
}//echoEvent
echoEvent("Start!");
//формируем строку запуска скрипта imapsync с параметрами
$strexe = "/bin/bash /home/user/imapsync/startimapsync.sh "
.htmlspecialchars($_COOKIE["mail1"]).' '
.htmlspecialchars($_COOKIE["pass1"])." "
.htmlspecialchars($_COOKIE["mail2"])." "
.htmlspecialchars($_COOKIE["pass2"])." "
.htmlspecialchars($_COOKIE["msrv1"])." "
.htmlspecialchars($_COOKIE["msrv2"]);
echoEvent($strexe);
//запускаем sh скрипт из командной строки linux
$proc = popen($strexe,'r');
//могут быть ограничения php, поэтому достаточно вывести результат окончания миграции
while (!feof($proc)) {
echoEvent(fread($proc, 4096));
}
echoEvent("Finish!");
?>
Скрипт миграции почтового ящика (startimapsync.sh) принимает параметры командной строки: логины и пароли, imap-сервера исходного и конечного ящиков соответственно.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync \
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2 \
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4 \
#использование шифрования при подключении к серверу
--ssl1 --ssl2 \
#сопоставление папок
--automap \
#первой синхронизируем папку входящих
--folderfirst INBOX \
#сопоставление папок
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/" \
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/" \
--regextrans2 "s/&BCEEPwQwBDw-/Junk/" \
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/" \
#правильно принимаем не прочитанные письма во Входящих
--regexflag 's/\\Unseen//g' \
#Сравнение полученных и отправленных писем по параметру Идентификационный номер
--useheader Message-Id
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
На сервере назначения необходимо иметь ящик с нужным логином и паролем. Перед использованием Imapsync нужно обязательно установить его (
You must be registered for see links
).По причине запрета организацией использовать пароли от почтовых ящиков сотрудников в скрипте процесс миграции передаем пользователю. Для этого разработан web-интерфейс пользователя, который состоит из модуля формы (gis.html) и модуля запуска скрипта imapsync (gis.php). Заполнение серверов imap можно автоматизировать анализируя содержимое поля с названием почтового ящика. Использование Fetchmail как плагина roundcube не рассматривается, т.к. мною не был найден подробный связный разбор этого вопроса.
Web-интерфейс состоит из полей с информацией о почтовых ящиках, области вывода выполнения операции и кнопок управления (gis.html).

Миграция почтового ящика
Исходный почтовый ящик: |
[TD]
[TD]
Пароль:
[TD]
[TD]
IMAP сервер:
[/TD]
[TD]
[TR][TD]
Конечный почтовый ящик:
[/TD]
[TD]
[TD]
Пароль:
[TD]
[TD]
IMAP сервер:
[/TD]
[TD][/TD]
[/TD]
[/TD]
[/TD]
[/TD]
[/TD]
[/TD]
[/TD] [/TR]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD]
Результат выполнения:
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD][/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD][/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[TR][TD]
[TD]
[TD]
[TD]
[TR][TD]
[TD]
[TD]
[TD]
Модуль запуска скрипта imapsync (gis.php).
event-stream');
header('Cache-Control: no-cache');
//вывод в область сообщений
function echoEvent($datatext) {
echo "data: ".implode("\ndata: ", explode("\n", $datatext))."\n\n";
}//echoEvent
echoEvent("Start!");
//формируем строку запуска скрипта imapsync с параметрами
$strexe = "/bin/bash /home/user/imapsync/startimapsync.sh "
.htmlspecialchars($_COOKIE["mail1"]).' '
.htmlspecialchars($_COOKIE["pass1"])." "
.htmlspecialchars($_COOKIE["mail2"])." "
.htmlspecialchars($_COOKIE["pass2"])." "
.htmlspecialchars($_COOKIE["msrv1"])." "
.htmlspecialchars($_COOKIE["msrv2"]);
echoEvent($strexe);
//запускаем sh скрипт из командной строки linux
$proc = popen($strexe,'r');
//могут быть ограничения php, поэтому достаточно вывести результат окончания миграции
while (!feof($proc)) {
echoEvent(fread($proc, 4096));
}
echoEvent("Finish!");
?>
Скрипт миграции почтового ящика (startimapsync.sh) принимает параметры командной строки: логины и пароли, imap-сервера исходного и конечного ящиков соответственно.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync \
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2 \
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4 \
#использование шифрования при подключении к серверу
--ssl1 --ssl2 \
#сопоставление папок
--automap \
#первой синхронизируем папку входящих
--folderfirst INBOX \
#сопоставление папок
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/" \
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/" \
--regextrans2 "s/&BCEEPwQwBDw-/Junk/" \
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/" \
#правильно принимаем не прочитанные письма во Входящих
--regexflag 's/\\Unseen//g' \
#Сравнение полученных и отправленных писем по параметру Идентификационный номер
--useheader Message-Id
[/TD]
[/TD]
[/TD]
[/TD][/TR]
[/TD]
[/TD]
[/TD]
[/TD][/TR]