Shkëmbimi i postës midis serverëve përmes ndërfaqes së përdoruesit nëpërmjet IMAPSync

Në këtë artikull do të shqyrtohet mënyra e transferimit të postës ndërmjet serverëve të ndryshëm duke përdorur mjetin IMAPSync përmes një ndërfaqe të thjeshtë përdoruesi.

Në serverin e destinacionit duhet të keni një kuti me emrin e duhur të përdoruesit dhe fjalëkalimin. Para përdorimit të Imapsync, është e nevojshme ta instaloni atë (https://imapsync.lamiral.info/#install).

Për shkak të ndalimit nga organizata për të përdorur fjalëkalimet e kutive të postës së punonjësve në skenar, procesi i migrimit e kalon te përdoruesi. Për këtë, është zhvilluar një ndërfaqe web për përdoruesit, e cila përbëhet nga një moduli formës (gis.html) dhe një moduli për të nisur skenarin imapsync (gis.php). Plotësimi serverësh Imap-in mund të automatizohet duke analizuar përmbajtjen e fushës me emrin e kutisë postare. Përdorimi i Fetchmail si një plugin për roundcube nuk shqyrtohet, pasi nuk kam gjetur një analizë të detajuar dhe të lidhur rreth kësaj çështjeje.

Ndërfaqja web përbëhet nga fusha me informacion mbi kutitë postare, një zonë për nxjerrjen e rezultatëve të operacionit dhe butonat e kontrollit (gis.html).

Shkëmbimi i postës midis serverëve përmes ndërfaqes së përdoruesit nëpërmjet 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>Migrimi i kutisë postare</h1>
<form name="maildata" action="">
   <table>
        <tr><td><b>Kuti e origjinës postare:<b></td>
            <td><input name="mail1" size="20" value=""
        <tr><td><b>Fjalëkalimi:<b>
            <td><input type="password" name="pass1" size="20" value=""
        <tr><td><b>Serveri IMAP:<b></td>
            <td><input name="msrv1" size="20" value=""<td>
        <tr><td><b>Kuti përfundimtare postare:<b></td>
            <td><input name="mail2" size="20" value=""
        <tr><td><b>Fjalëkalimi:<b>
            <td><input type="password" name="pass2" size="20" value=""
        <tr><td><b>Serveri IMAP:<b></td>
            <td><input name="msrv2" size="20" value=""<td>
    </table>
    <p>Rezultati i ekzekutimit:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
   <input type="button" value="Kryej" onclick="Complete();">
    <input type="reset" value="Reset">
    <input type="button" value="Shfaq cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="sq"/></form>
</body>
</html>

Moduli për nisjen e skenarit 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!");
?>

Skenari për migrimin e kutive të postës (startimapsync.sh) merr parametra nga linja e komandës: identitetet dhe fjalëkalimet, serverët imap të kutive të postës burim dhe destinacion.

#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
 /home/user/imapsync/./imapsync 
#сервер начального почтового ящика, логин, пароль
  --host1 $5:993    --user1 $1 --password1 $2 
#сервер конечного почтового ящика, логин, пароль
  --host2 $6:993    --user2 $3 --password2 $4 
#использование  шифрования при подключении к serverit
  --ssl1  --ssl2 
#përputhja e dosjeve
  --automap 
#dosja e parë që do të synkronizohet është Inbox
  --folderfirst INBOX 
#përputhja e dosjeve
  --regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/" 
  --regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/" 
  --regextrans2 "s/&BCEEPwQwBDw-/Junk/" 
  --regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/" 
#pranoni saktësisht e-mail-et e pa lexuara në Inbox
  --regexflag 's/\Unseen//g' 
#Krahasimi i e-mail-eve të pranuara dhe të dërguara sipas numrit të identifikimit
  --useheader Message-Id

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster