Прехвърляне на поща между сървъри чрез потребителски интерфейс с IMAPSync

В тази статия ще разгледаме как да прехвърлим поща между различни сървъри с помощта на утилитата IMAPSync през прост интерфейс за потребителя.

На назначеното сървър трябва да имате пощенска кутия с необходимите потребителско име и парола. Преди да използвате Imapsync, е задължително да го инсталирате (https://imapsync.lamiral.info/#install).

Поради забраната на организацията да използва пароли за пощенски кутии в скрипта, процесът на миграция се предава на потребителя. За тази цел е разработен уеб интерфейс, който се състои от модулна форма (gis.html) и модул за стартиране на скрипта imapsync (gis.php). Попълването сървъри imap може да бъде автоматизирано чрез анализ на съдържанието на полето с името на пощенската кутия. Използването на Fetchmail като плъгин за Roundcube не се разглежда, тъй като не намерих подробен и свързан анализ на този въпрос.

Уеб интерфейсът се състои от полета с информация за пощенските кутии, област за извеждане на резултатите от операцията и контролни бутони (gis.html).

Прехвърляне на поща между сървъри чрез потребителски интерфейс с IMAPSync

<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" action="">
   <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="Покажи бисквитките" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="bg"/></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))."nn";
 } //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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster