[Настройка Linux, Разработка веб-сайтов, PHP, JavaScript, Серверное администрирование] Перенос почты между серверами через интерфейс пользователя посредством IMAPSync
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
В этой статье будет рассмотрен способ переноса почты между разными серверами с помощью утилиты IMAPSync через примитивный интерфейс пользователя.На сервере назначения необходимо иметь ящик с нужным логином и паролем. Перед использованием Imapsync нужно обязательно установить его (https://imapsync.lamiral.info/#install).По причине запрета организацией использовать пароли от почтовых ящиков сотрудников в скрипте процесс миграции передаем пользователю. Для этого разработан web-интерфейс пользователя, который состоит из модуля формы (gis.html) и модуля запуска скрипта imapsync (gis.php). Заполнение серверов imap можно автоматизировать анализируя содержимое поля с названием почтового ящика. Использование Fetchmail как плагина roundcube не рассматривается, т.к. мною не был найден подробный связный разбор этого вопроса.Web-интерфейс состоит из полей с информацией о почтовых ящиках, области вывода выполнения операции и кнопок управления (gis.html).
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<script>
//запуск скрипта sh из командной строки linux
function isexe() {
var ta = document.getElementById('output');
document.getElementById('output').value += 'Start import, please wait...\n';
var source = new EventSource('gis.php');
source.addEventListener('message', function(e) {
if (e.data !== '') {
ta.value += e.data + '\n';
}
}, false);
source.addEventListener('error', function(e) {
source.close();
}, false);
}//isexe
//кнопка Выполнить
function Complete() {
document.cookie = "mail1="+document.maildata.mail1.value;
document.cookie = "pass1="+document.maildata.pass1.value;
document.cookie = "mail2="+document.maildata.mail2.value;
document.cookie = "pass2="+document.maildata.pass2.value;
document.cookie = "msrv1="+document.maildata.msrv1.value;
document.cookie = "msrv2="+document.maildata.msrv2.value;
//alert(document.cookie); // показываем все куки
isexe();
document.cookie = "mail1="+document.maildata.mail1.value+"; max-age=0";
document.cookie = "pass1="+document.maildata.pass1.value+"; max-age=0";
document.cookie = "mail2="+document.maildata.mail2.value+"; max-age=0";
document.cookie = "pass2="+document.maildata.pass2.value+"; max-age=0";
document.cookie = "msrv1="+document.maildata.msrv1.value+"; max-age=0";
document.cookie = "msrv2="+document.maildata.msrv2.value+"; max-age=0";
}//Complete
function ShowCookie() {
alert(document.cookie); // показываем все куки
}
</script>
</head>
<body>
<H1>Миграция почтового ящика</H1>
<FORM NAME="maildata">
<TABLE>
<TR><TD><B>Исходный почтовый ящик:<B></TD>
<TD><INPUT NAME="mail1" SIZE=20 VALUE=""
<TR><TD><B>Пароль:<B>
<TD><INPUT TYPE="password" NAME="pass1" SIZE=20 VALUE=""
<TR><TD><B>IMAP сервер:<B></TD>
<TD><INPUT NAME="msrv1" SIZE=20 VALUE=""<TD>
<TR><TD><B>Конечный почтовый ящик:<B></TD>
<TD><INPUT NAME="mail2" SIZE=20 VALUE=""
<TR><TD><B>Пароль:<B>
<TD><INPUT TYPE="password" NAME="pass2" SIZE=20 VALUE=""
<TR><TD><B>IMAP сервер:<B></TD>
<TD><INPUT NAME="msrv2" SIZE=20 VALUE=""<TD>
</TABLE>
<p>Результат выполнения:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<INPUT TYPE="button" VALUE="Выполнить" onClick="Complete();">
<INPUT TYPE="reset" VALUE="Сброс">
<INPUT TYPE="button" VALUE="Показать cookie" onClick="ShowCookie();">
</FORM>
</body>
</html>
Модуль запуска скрипта imapsync (gis.php).
<?php
ob_end_flush();
ini_set("output_buffering", "0");
ob_implicit_flush(true);
header('Content-Type: text/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
===========
Источник:
habr.com
===========
Похожие новости:
- [Алгоритмы, Высокая производительность, Математика, Программирование] Динамическая балансировка нагрузки в pull-схеме
- [Серверное администрирование, Сетевое оборудование, Сетевые технологии] Что стало причиной сбоя 30 августа, в ходе которого мировой трафик упал на 3,5%
- [Big Data, DevOps, IT-инфраструктура, Информационная безопасность, Серверное администрирование] ELK, SIEM из OpenSource, Open Distro: Case management (перевод)
- [*nix, Nginx, Настройка Linux, Системное администрирование] Эта маленькая правка не может убить сервер
- [JavaScript, ReactJS, TypeScript] Пишем свой CLI генерации React компонент, а может быть не только компонент, а может не только React
- [JavaScript, Программирование, Разработка веб-сайтов] JavaScript: область видимости простыми словами (перевод)
- [JavaScript, Node.JS, Разработка веб-сайтов] Безопасность npm-проектов, часть 1
- [Графические оболочки, Настройка Linux, Разработка под Linux] Как устроена графика в Linux: обзор различных сред оформления рабочего стола
- [Разработка веб-сайтов, Микросервисы] Как мы распилили монолит. Часть 1
- [Habr, Разработка веб-сайтов] АМА с Хабром #20. Тестируем новый WYSIWYG
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_razrabotka_vebsajtov (Разработка веб-сайтов), #_php, #_javascript, #_servernoe_administrirovanie (Серверное администрирование), #_migratsija (миграция), #_pochtovyj_server (почтовый сервер), #_imapsync, #_nastrojka_linux (
Настройка Linux
), #_razrabotka_vebsajtov (
Разработка веб-сайтов
), #_php, #_javascript, #_servernoe_administrirovanie (
Серверное администрирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 23:18
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
В этой статье будет рассмотрен способ переноса почты между разными серверами с помощью утилиты IMAPSync через примитивный интерфейс пользователя.На сервере назначения необходимо иметь ящик с нужным логином и паролем. Перед использованием Imapsync нужно обязательно установить его (https://imapsync.lamiral.info/#install).По причине запрета организацией использовать пароли от почтовых ящиков сотрудников в скрипте процесс миграции передаем пользователю. Для этого разработан web-интерфейс пользователя, который состоит из модуля формы (gis.html) и модуля запуска скрипта imapsync (gis.php). Заполнение серверов imap можно автоматизировать анализируя содержимое поля с названием почтового ящика. Использование Fetchmail как плагина roundcube не рассматривается, т.к. мною не был найден подробный связный разбор этого вопроса.Web-интерфейс состоит из полей с информацией о почтовых ящиках, области вывода выполнения операции и кнопок управления (gis.html). <html>
<head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <script> //запуск скрипта sh из командной строки linux function isexe() { var ta = document.getElementById('output'); document.getElementById('output').value += 'Start import, please wait...\n'; var source = new EventSource('gis.php'); source.addEventListener('message', function(e) { if (e.data !== '') { ta.value += e.data + '\n'; } }, false); source.addEventListener('error', function(e) { source.close(); }, false); }//isexe //кнопка Выполнить function Complete() { document.cookie = "mail1="+document.maildata.mail1.value; document.cookie = "pass1="+document.maildata.pass1.value; document.cookie = "mail2="+document.maildata.mail2.value; document.cookie = "pass2="+document.maildata.pass2.value; document.cookie = "msrv1="+document.maildata.msrv1.value; document.cookie = "msrv2="+document.maildata.msrv2.value; //alert(document.cookie); // показываем все куки isexe(); document.cookie = "mail1="+document.maildata.mail1.value+"; max-age=0"; document.cookie = "pass1="+document.maildata.pass1.value+"; max-age=0"; document.cookie = "mail2="+document.maildata.mail2.value+"; max-age=0"; document.cookie = "pass2="+document.maildata.pass2.value+"; max-age=0"; document.cookie = "msrv1="+document.maildata.msrv1.value+"; max-age=0"; document.cookie = "msrv2="+document.maildata.msrv2.value+"; max-age=0"; }//Complete function ShowCookie() { alert(document.cookie); // показываем все куки } </script> </head> <body> <H1>Миграция почтового ящика</H1> <FORM NAME="maildata"> <TABLE> <TR><TD><B>Исходный почтовый ящик:<B></TD> <TD><INPUT NAME="mail1" SIZE=20 VALUE="" <TR><TD><B>Пароль:<B> <TD><INPUT TYPE="password" NAME="pass1" SIZE=20 VALUE="" <TR><TD><B>IMAP сервер:<B></TD> <TD><INPUT NAME="msrv1" SIZE=20 VALUE=""<TD> <TR><TD><B>Конечный почтовый ящик:<B></TD> <TD><INPUT NAME="mail2" SIZE=20 VALUE="" <TR><TD><B>Пароль:<B> <TD><INPUT TYPE="password" NAME="pass2" SIZE=20 VALUE="" <TR><TD><B>IMAP сервер:<B></TD> <TD><INPUT NAME="msrv2" SIZE=20 VALUE=""<TD> </TABLE> <p>Результат выполнения:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p> <INPUT TYPE="button" VALUE="Выполнить" onClick="Complete();"> <INPUT TYPE="reset" VALUE="Сброс"> <INPUT TYPE="button" VALUE="Показать cookie" onClick="ShowCookie();"> </FORM> </body> </html> <?php
ob_end_flush(); ini_set("output_buffering", "0"); ob_implicit_flush(true); header('Content-Type: text/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!"); ?> #!/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 =========== Источник: habr.com =========== Похожие новости:
Настройка Linux ), #_razrabotka_vebsajtov ( Разработка веб-сайтов ), #_php, #_javascript, #_servernoe_administrirovanie ( Серверное администрирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 25-Ноя 23:18
Часовой пояс: UTC + 5