IMAPSync ашиглан хэрэглэгчийн интерфэйсээр серверүүд хооронд захидал дамжуулах

Энэ нийтлэл нь энгийн хэрэглэгчийн интерфэйсээр дамжуулан IMAPSync хэрэгслийг ашиглан өөр өөр серверүүдийн хооронд захидал хэрхэн шилжүүлэх талаар авч үзэх болно.

Очих сервер дээр шаардлагатай нэвтрэх болон нууц үг бүхий хайрцаг байх ёстой. Imapsync-ийг ашиглахын өмнө та үүнийг суулгах ёстой (https://imapsync.lamiral.info/#install).

Байгууллага нь скриптэд ажилтны имэйл нууц үгийг ашиглахыг хориглодог тул шилжүүлэх үйл явцыг хэрэглэгчдэд шилжүүлдэг. Энэ зорилгоор маягтын модуль (gis.html) болон imapsync скрипт эхлүүлэх модуль (gis.php)-ээс бүрдэх вэбд суурилсан хэрэглэгчийн интерфэйсийг боловсруулсан. Бөглөх серверүүд Шуудангийн хайрцгийн нэрийн талбарын агуулгыг шинжлэх замаар IMAP-г автоматжуулж болно. Fetchmail-г Roundcube залгаас болгон ашиглахыг авч үзэхгүй, учир нь би энэ асуудлын талаар дэлгэрэнгүй, уялдаа холбоотой дүн шинжилгээ олж чадаагүй.

Вэб интерфэйс нь шуудангийн хайрцгийн талаарх мэдээлэл, үйлдлийн гүйцэтгэлийн гаралтын хэсэг, хяналтын товчлуурууд (gis.html) зэргээс бүрдэнэ.

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>Миграция почтового ящика</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 скрипт эхлүүлэгч (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!");
?>

Шуудангийн хайрцгийг шилжүүлэх скрипт (startimapsync.sh) нь тушаалын мөрийн параметрүүдийг хүлээн авдаг: нэвтрэх болон нууц үг, эх сурвалж болон очих шуудангийн хайрцгийн imap серверүүд.

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

Эх сурвалж: www.habr.com

DDoS хамгаалалт, VPS VDS сервер бүхий сайтуудад найдвартай хостинг худалдаж аваарай 🔥 DDoS хамгаалалттай, VPS VDS сервертэй найдвартай вэбсайт хостинг худалдаж аваарай | ProHoster