Transferencia de correo entre servidores a través de la interfaz de usuario mediante IMAPSync

En este artículo se examinará el método para transferir correos entre diferentes servidores utilizando la utilidad IMAPSync a través de una interfaz de usuario sencilla.

En el servidor de destino es necesario tener una cuenta con el nombre de usuario y la contraseña necesarios. Antes de usar Imapsync, es imprescindible instalarlo (https://imapsync.lamiral.info/#install).

Debido a la prohibición de la organización de utilizar las contraseñas de las cuentas de correo de los empleados en el script, el proceso de migración se pasa al usuario. Para ello, se ha desarrollado una interfaz web de usuario, que consta de un módulo de formulario (gis.html) y un módulo para ejecutar el script imapsync (gis.php). Llenando servidores imap se puede automatizar analizando el contenido del campo con el nombre de la cuenta de correo. No se considera el uso de Fetchmail como un complemento de roundcube, ya que no he encontrado un análisis detallado de esta cuestión.

La interfaz web consiste en campos con la información sobre las cuentas de correo, un área para mostrar la ejecución de la operación y botones de control (gis.html).

Transferencia de correo entre servidores a través de la interfaz de usuario mediante 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>Migración de buzón de correo</h1>
<form name="maildata" action="">
   <table>
        <tr><td><b>Buzón de correo de origen:<b></td>
            <td><input name="mail1" size="20" value=""
        <tr><td><b>Contraseña:<b>
            <td><input type="password" name="pass1" size="20" value=""
        <tr><td><b>Servidor IMAP:<b></td>
            <td><input name="msrv1" size="20" value=""<td>
        <tr><td><b>Buzón de correo de destino:<b></td>
            <td><input name="mail2" size="20" value=""
        <tr><td><b>Contraseña:<b>
            <td><input type="password" name="pass2" size="20" value=""
        <tr><td><b>Servidor IMAP:<b></td>
            <td><input name="msrv2" size="20" value=""<td>
    </table>
    <p>Resultado de la ejecución:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
   <input type="button" value="Ejecutar" onclick="Complete();">
    <input type="reset" value="Reiniciar">
    <input type="button" value="Mostrar cookies" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="es"/></form>
</body>
</html>

Módulo para ejecutar el 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!");
?>

El script de migración de la bandeja de entrada (startimapsync.sh) acepta parámetros de línea de comandos: nombres de usuario y contraseñas, así como los servidores imap de las cuentas 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 
#использование  шифрования при подключении к servidor
  --ssl1  --ssl2 
#mapeo de carpetas
  --automap 
#primera carpeta de sincronización de entradas
  --folderfirst INBOX 
#mapeo de carpetas
  --regextrans2 "s/BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/" 
  --regextrans2 "s/BBoEPgRABDcEOAQ9BDA-/Trash/" 
  --regextrans2 "s/BCEEPwQwBDw-/Junk/" 
  --regextrans2 "s/BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/" 
#correctamente aceptamos correos no leídos en Entradas
  --regexflag 's/\Unseen//g' 
#Comparación de correos recibidos y enviados por el parámetro Identificación
  --useheader Message-Id

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster