Transferencia de correo entre servidores mediante la interfaz de usuario mediante IMAPSync

Este artículo le mostrará cómo transferir correo entre diferentes servidores usando la utilidad IMAPSync a través de una interfaz de usuario primitiva.

En el servidor de destino, debe tener un buzón con el nombre de usuario y la contraseña requeridos. Antes de usar Imapsync, asegúrese de instalarlo (https://imapsync.lamiral.info/#install).

Debido a la prohibición de la organización de usar contraseñas de los buzones de correo de los empleados en el script, pasamos el proceso de migración al usuario. Para ello, se ha desarrollado una interfaz de usuario web, que consta de un módulo de formulario (gis.html) y un lanzador de scripts imapsync (gis.php). El llenado de los servidores imap se puede automatizar analizando el contenido del campo de nombre del buzón. Usar Fetchmail como un complemento de roundcube está fuera de discusión. No he encontrado un análisis coherente detallado de este tema.

La interfaz web consta de campos con información sobre buzones, un área de salida para los botones de operación y control (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>

Lanzador de scripts 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!");
?>

El script de migración de buzones de correo (startimapsync.sh) acepta parámetros de línea de comando: inicios de sesión y contraseñas para el servidor imap de los buzones de correo de origen y destino, respectivamente.

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




All Articles