Русский
Русский
English
Статистика
Реклама

Перенос почты между серверами через интерфейс пользователя посредством IMAPSync

В этой статье будет рассмотрен способ переноса почты между разными серверами с помощью утилиты IMAPSync через примитивный интерфейс пользователя.

На сервере назначения необходимо иметь ящик с нужным логином и паролем. Перед использованием Imapsync нужно обязательно установить его (http://personeltest.ru/aways/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
К списку статей
Опубликовано: 02.09.2020 04:14:03
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Настройка linux

Разработка веб-сайтов

Php

Javascript

Серверное администрирование

Миграция

Почтовый сервер

Imapsync

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru