Trasferimento della posta tra i server tramite interfaccia utente utilizzando IMAPSync

In questo articolo verrΓ  trattato il modo di trasferire la posta tra diversi server usando l'utility IMAPSync tramite un'interfaccia utente semplice.

Sul server di destinazione Γ¨ necessario avere una casella con le credenziali corrette. Prima di utilizzare Imapsync, Γ¨ fondamentale installarlo (https://imapsync.lamiral.info/#install).

A causa del divieto da parte dell'organizzazione di utilizzare le password delle caselle di posta dei dipendenti nello script, il processo di migrazione viene trasferito all'utente. A tal fine, Γ¨ stata sviluppata un'interfaccia web che consiste in un modulo di formulario (gis.html) e un modulo per l'esecuzione dello script imapsync (gis.php). La compilazione server La configurazione di imap puΓ² essere automatizzata analizzando il contenuto del campo con il nome della casella di posta. L'uso di Fetchmail come plugin di Roundcube non Γ¨ considerato, poichΓ© non sono riuscito a trovare una dettagliata analisi connessa a questa questione.

L'interfaccia web consiste in campi con informazioni sulle caselle di posta, un'area di output per l'esecuzione dell'operazione e pulsanti di controllo (gis.html).

Trasferimento della posta tra i server tramite interfaccia utente utilizzando 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>Migrazione della casella di posta</h1>
<form name="maildata" action="">
   <table>
        <tr><td><b>Casella di posta sorgente:<b></td>
            <td><input name="mail1" size="20" value=""
        <tr><td><b>Password:<b>
            <td><input type="password" name="pass1" size="20" value=""
        <tr><td><b>Server IMAP:<b></td>
            <td><input name="msrv1" size="20" value=""<td>
        <tr><td><b>Casella di posta di destinazione:<b></td>
            <td><input name="mail2" size="20" value=""
        <tr><td><b>Password:<b>
            <td><input type="password" name="pass2" size="20" value=""
        <tr><td><b>Server IMAP:<b></td>
            <td><input name="msrv2" size="20" value=""<td>
    </table>
    <p>Risultato dell'esecuzione:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
   <input type="button" value="Esegui" onclick="Complete();">
    <input type="reset" value="Ripristino">
    <input type="button" value="Mostra cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="it"/></form>
</body>
</html>

Modulo per l'esecuzione dello script 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!");
?>

Lo script di migrazione della casella di posta (startimapsync.sh) accetta parametri da riga di comando: credenziali e password, server imap delle caselle di partenza e di destinazione rispettivamente.

#!/bin/bash
#ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΎΡ‚ΠΊΡƒΠ΄Π° Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π΄Π°Π½Π½Ρ‹ΠΉ скрипт
cd `dirname $0`
#запуск imapsync с Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ
 /home/user/imapsync/./imapsync 
#сСрвСр Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика, Π»ΠΎΠ³ΠΈΠ½, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ
  --host1 $5:993    --user1 $1 --password1 $2 
#сСрвСр ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика, Π»ΠΎΠ³ΠΈΠ½, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ
  --host2 $6:993    --user2 $3 --password2 $4 
#использованиС  ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ ΠΊ server
  --ssl1  --ssl2 
#mappatura delle cartelle
  --automap 
#prima sincronia della cartella delle email in arrivo
  --folderfirst INBOX 
#incontro delle cartelle
  --regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Inviati/" 
  --regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Cestino/" 
  --regextrans2 "s/&BCEEPwQwBDw-/Spam/" 
  --regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Bozze/" 
#ricevi correttamente le email non lette nella Posta in arrivo
  --regexflag 's/\Unseen//g' 
#Confronto tra le email ricevute e inviate in base al numero identificativo
  --useheader Message-Id

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS πŸ”₯ Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster