IMAPSync'i kullanarak kullanıcı arayüzü aracılığıyla sunucular arasında posta aktarma

Bu makalede, ilkel bir kullanıcı arayüzü aracılığıyla IMAPSync yardımcı programını kullanarak farklı sunucular arasında postaların nasıl aktarılacağına bakılacaktır.

Hedef sunucuda gerekli kullanıcı adını ve şifreyi içeren bir kutunuz olmalıdır. Imapsync'i kullanmadan önce onu yüklemelisiniz (https://imapsync.lamiral.info/#install).

Organizasyon, komut dosyasında çalışan e-posta şifrelerinin kullanımını yasakladığı için, geçiş süreci kullanıcıya devredilmiştir. Bu amaçla, bir form modülü (gis.html) ve bir imapsync komut dosyası başlatıcı modülünden (gis.php) oluşan web tabanlı bir kullanıcı arayüzü geliştirilmiştir. Formu doldurmak... sunucular IMAP, posta kutusu adı alanının içeriği analiz edilerek otomatikleştirilebilir. Fetchmail'in Roundcube eklentisi olarak kullanılması düşünülmüyor, çünkü bu konuyla ilgili detaylı ve tutarlı bir analiz bulamadım.

Web arayüzü, posta kutuları hakkında bilgi içeren alanlardan, bir işlem yürütme çıktı alanından ve kontrol düğmelerinden (gis.html) oluşur.

IMAPSync'i kullanarak kullanıcı arayüzü aracılığıyla sunucular arasında posta aktarma

<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 komut dosyası başlatıcısı (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!");
?>

Posta kutusu geçiş komut dosyası (startimapsync.sh) komut satırı parametrelerini kabul eder: oturum açma bilgileri ve parolalar, sırasıyla kaynak ve hedef posta kutularının imap sunucuları.

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

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster