Overførsel af e-mails mellem servere via brugergrænsefladen med IMAPSync

Denne artikel vil forklare, hvordan man flytter e-mails mellem forskellige servere ved hjælp af IMAPSync-værktøjet via et enkelt brugerinterface.

På destinationsserveren skal der være en konto med den nødvendige brugernavn og adgangskode. Før brugen af Imapsync skal det installeres (https://imapsync.lamiral.info/#install).

På grund af organisationens forbud mod at bruge adgangskoder til medarbejderes e-mailkonti i scriptet, overlader vi migrationsprocessen til brugeren. Derfor er der udviklet et webbrugerinterface, der består af et formularmodul (gis.html) og et modul til at starte imapsync-scriptet (gis.php). Udfyldning servere imap kan automatiseres ved at analysere indholdet af feltet med e-mailkontonavnet. Brugen af Fetchmail som plugin til Roundcube overvejes ikke, da jeg ikke har fundet en detaljeret sammenhængende gennemgang af dette emne.

Webbrugergrænsefladen består af felter med oplysninger om e-mailkonti, et område til output af operationens udførelse og kontrolknapper (gis.html).

Overførsel af e-mails mellem servere via brugergrænsefladen med 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>Migrering af e-mailkonto</h1>
<form name="maildata" action="">
   <table>
        <tr><td><b>Oprindelig e-mailkonto:<b></td>
            <td><input name="mail1" size="20" value=""
        <tr><td><b>Adgangskode:<b>
            <td><input type="password" name="pass1" size="20" value=""
        <tr><td><b>IMAP-server:<b></td>
            <td><input name="msrv1" size="20" value=""<td>
        <tr><td><b>Slute-mailkonto:<b></td>
            <td><input name="mail2" size="20" value=""
        <tr><td><b>Adgangskode:<b>
            <td><input type="password" name="pass2" size="20" value=""
        <tr><td><b>IMAP-server:<b></td>
            <td><input name="msrv2" size="20" value=""<td>
    </table>
    <p>Resultatet af udførelsen:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
   <input type="button" value="Execute" onclick="Complete();">
    <input type="reset" value="Reset">
    <input type="button" value="Vis cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="da"/></form>
</body>
</html>

Modulet til at starte imapsync-scriptet (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');

 //output til beskedområdet
function echoEvent($datatext) {
  echo "data: ".implode("ndata: ", explode("n", $datatext))."nn";
 } //echoEvent

 echoEvent("Start!");
 //dan formulere vi startkommandoen for imapsync-scriptet med parametre
 $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);
 //starter sh-scriptet fra kommandolinjen linux
 $proc = popen($strexe,'r');
 //der kan være php-begrænsninger, så det er tilstrækkeligt at udskrive resultatet af migrationsafslutningen
 while (!feof($proc)) {
  echoEvent(fread($proc, 4096));
 }
  echoEvent("Finish!");
?>

E-mail migreringsscriptet (startimapsync.sh) accepterer kommandolinjeparametre: brugernavne og adgangskoder, imap-servere for de oprindelige og endelige konti henholdsvis.

#!/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 
#mapning af mapper
  --automap 
#den første mapper der synkroniseres af indbakken
  --folderfirst INBOX 
#mapning af mapper
  --regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sendt/" 
  --regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Papirkurv/" 
  --regextrans2 "s/&BCEEPwQwBDw-/Uønsket/" 
  --regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Udkast/" 
#korrekt modtagning af ulæste beskeder i indbakken
  --regexflag 's/\Unseen//g' 
#Sammenligning af modtagne og sendte mails efter identifikationsnummer
  --useheader Message-Id

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster