Posta zerbitzarien artean transferitzea erabiltzailearen interfazearen bidez IMAPSync erabiliz

Artikulu honetan IMAPSync utilitatea erabiliz posta zerbitzari desberdinen artean nola transferitzeko erabiltzailearen interfaze primitibo baten bidez eztabaidatuko da.

Helmugako zerbitzarian, beharrezkoak diren saio-hasiera eta pasahitza dituen postontzi bat izan behar duzu. Imapsync erabili aurretik, ziurtatu instalatu duzula (https://imapsync.lamiral.info/#install).

Erakundeak gidoian langileen posta elektronikoko pasahitzak erabiltzea debekatzen duenez, migrazio prozesua erabiltzaileari eskuordetzen zaio. Horretarako, web bidezko erabiltzaile-interfaze bat garatu da, formulario-modulu batez (gis.html) eta imapsync script abiarazle-modulu batez (gis.php) osatua. Betetzea zerbitzariak IMAP automatizatu daiteke postontziaren izenaren eremuaren edukia aztertuz. Fetchmail Roundcube plugin gisa erabiltzea ez da kontuan hartzen, arazo honen analisi zehatz eta koherenterik aurkitu ez dudalako.

Web interfazeak postontziei buruzko informazioa duten eremuak, eragiketa bat egiteko irteera-eremua eta kontrol-botoiak (gis.html) ditu.

Posta zerbitzarien artean transferitzea erabiltzailearen interfazearen bidez IMAPSync erabiliz

<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 script-abiarazlea (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!");
?>

Postontzien migrazio script-ak (startimapsync.sh) komando-lerroko parametroak onartzen ditu: saio-hasierak eta pasahitzak, iturburuko eta helmugako postontzietako imap zerbitzariak, hurrenez hurren.

#!/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

Iturria: www.habr.com

Erosi hosting fidagarria DDoS babesa duten guneetarako, VPS VDS zerbitzariak πŸ”₯ Erosi webguneentzako ostatu fidagarria DDoS babesarekin, VPS VDS zerbitzariak | ProHoster