0

imapsync

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ сСрвСрами Ρ‡Π΅Ρ€Π΅Π· интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ посрСдством IMAPSync

27.03.2023

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСн способ пСрСноса ΠΏΠΎΡ‡Ρ‚Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сСрвСрами с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ IMAPSync Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

На сСрвСрС назначСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ящик с Π½ΡƒΠΆΠ½Ρ‹ΠΌ Π»ΠΎΠ³ΠΈΠ½ΠΎΠΌ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ. ΠŸΠ΅Ρ€Π΅Π΄ использованиСм Imapsync Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ (https://imapsync.lamiral.info/#install).

По ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΎΡ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков сотрудников Π² скриптС процСсс ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ. Для этого Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ web-интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· модуля Ρ„ΠΎΡ€ΠΌΡ‹ (gis.html) ΠΈ модуля запуска скрипта imapsync (gis.php). Π—Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сСрвСров imap ΠΌΠΎΠΆΠ½ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ анализируя содСрТимоС поля с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика. ИспользованиС Fetchmail ΠΊΠ°ΠΊ ΠΏΠ»Π°Π³ΠΈΠ½Π° roundcube Π½Π΅ рассматриваСтся, Ρ‚.ΠΊ. мною Π½Π΅ Π±Ρ‹Π» Π½Π°ΠΉΠ΄Π΅Π½ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹ΠΉ связный Ρ€Π°Π·Π±ΠΎΡ€ этого вопроса.

Web-интСрфСйс состоит ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиках, области Π²Ρ‹Π²ΠΎΠ΄Π° выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ ΠΊΠ½ΠΎΠΏΠΎΠΊ управлСния (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>

ΠœΠΎΠ΄ΡƒΠ»ΡŒ запуска скрипта 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!");
?>

Π‘ΠΊΡ€ΠΈΠΏΡ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ ящика (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

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΡƒΡŽ систСму нСмыслим Π±Π΅Π· пСрСноса ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡ‡Ρ‚Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚Π°ΠΌ скопилось Π½Π΅ΠΌΠ°Π»ΠΎ Ρ†Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Π·Π°Π±ΠΎΡ‚Π»ΠΈΠ²ΠΎ Ρ€Π°Π·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ достаточно слоТной структурС Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΉ. ВсС это трСбуСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, Π½ΠΎ пСрСнСсти с наимСньшими нСудобствами. А Ссли ящиков ΠΌΠ½ΠΎΠ³ΠΎ, Ρ‚ΠΎ бСзусловно хочСтся Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ. Π‘ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒΡΡ с этой Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚Β imapsyncΒ – простая, Π½ΠΎ Π² Ρ‚ΠΎΠΆΠ΅ врСмя мощная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° для ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… ящиков ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ IMAP.

ОсновноС прСимущСство imapsync – это Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ Π½Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр ΠΈ, скаТСм большС, ΠΌΡ‹ Π½Π΅ совСтуСм этого Π΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° написана Π½Π° Perl ΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ достаточно ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ ΠΈ зависимостСй, Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ сСрвСр ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹, Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π°, ΠΏΠΎ сути, одноразовая.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ПК Π½Π° Linux, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΠΊΡƒ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Из DEB-систСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Debian ΠΈ Ubuntu, хотя ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² любой систСмС, Ссли Π²Ρ‹, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, обСспСчитС Π΅ΠΉ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ. Π’ нашСм случаС Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ ПК Π½Π° Debian.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ /etc/apt/sources.list ΠΈ убСдимся, Ρ‡Ρ‚ΠΎ Ρƒ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅Π² ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ Ρ€Π°Π·Π΄Π΅Π» contrib, Ссли это Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку послС

main 

Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

contrib

ПослС Ρ‡Π΅Π³ΠΎ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°Π΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ список ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ²:

apt update

ПослС Ρ‡Π΅Π³ΠΎ обращаСмся Π½Π° сайт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π·Π° ΠΈΠ½ΡΡ‚рукциями ΠΏΠΎ установкС. Для Debian ΠΎΠ½ΠΈ выглядят ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

apt install \
libauthen-ntlm-perl \
libcgi-pm-perl \
libcrypt-openssl-rsa-perl \
libdata-uniqid-perl \
libencode-imaputf7-perl \
libfile-copy-recursive-perl \
libfile-tail-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libhtml-parser-perl \
libjson-webtoken-perl \
libmail-imapclient-perl \
libparse-recdescent-perl \
libproc-processtable-perl \
libmodule-scandeps-perl \
libreadonly-perl \
libregexp-common-perl \
libsys-meminfo-perl \
libterm-readkey-perl \
libtest-mockobject-perl \
libtest-pod-perl \
libunicode-string-perl \
liburi-perl \
libwww-perl \
libtest-nowarnings-perl \
libtest-deep-perl \
libtest-warn-perl \
make \
time \
cpanminus

ВпСчатляСт? Π‘Π°ΠΌΠΎΠ΅ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ – это ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ΅ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π½Π°ΠΆΠ°Ρ‚ΡŒ Enter. ΠŸΠΎΡ‚ΠΎΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π· ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π½Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ своСго Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ всС это “Π΄ΠΎΠ±Ρ€ΠΎ” Π½Π° ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹ΠΉ сСрвСр Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ‹ скачали всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² домашнюю Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ ΠΈ скачаСм саму ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ:

cd
wget -N https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync

И сразу сдСлаСм Π΅Π΅ исполняСмой:

chmod +x imapsync

ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ инструкция Ρ‚Π°ΠΊΠΆΠ΅ совСтуСт ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² /usr/bin, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΡ‹ Π½Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π² этом особого смысла.

ИспользованиС ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ достаточно просто. Но, ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, стоит ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ: ΡΠ΅Ρ€Π²Π΅Ρ€-источник ΠΈΠΌΠ΅Π½ΡƒΠ΅Ρ‚ся ΠΊΠ°ΠΊ host1сСрвСр-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ – host2 ΠΈ всС ΠΎΠΏΡ†ΠΈΠΈ с индСксом 1 относятся ΠΊ источнику, Π° с индСксом 2 – ΠΊ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, user1 ΠΈΠ»ΠΈ password2.

Π’ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ случаС пСрСнос ящика Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

./imapsync \
--host1 imap.yandex.ru \
--user1 user@mydomain.ru \
--password1 "Pa$$word1" \
--host2 mk-61.it-31,ru \
--user2 user@it-31.ru \
--password2 "Pa$$word1"

ΠœΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ»ΠΈ пСрСнос ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠΈ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для удобочитаСмости ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ смСло ΠΏΠΈΡΠ°Ρ‚ΡŒ всС Π² ΠΎΠ΄Π½Ρƒ строку. Π‘Π°ΠΌΠΈ ΠΎΠΏΡ†ΠΈΠΈ Π² особых коммСнтариях Π½Π΅ Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ, сначала ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ хост-источник ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ доступа ΠΊ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠΌΡƒ ящику Π½Π° Π½Π΅ΠΌ, Π·Π°Ρ‚Π΅ΠΌ хост-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΡƒΡ‡Π΅Ρ‚Π½ΠΎΠΉ записи, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ пСрСносим ΠΏΠΎΡ‡Ρ‚Ρƒ.

Если всС сдСлано ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ скоро ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ Π»ΠΎΠ³ пСрСноса писСм.

Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ синхронизации зависит ΠΎΡ‚ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Π½ΠΎ основноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ количСство сообщСний, Π° Π½Π΅ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€. БрСдняя ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ пСрСноса с ЯндСкса Π½Π° тСстовый сСрвСр Ρƒ нас ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ ΠΎΠΊΠΎΠ»ΠΎ 2,5 сообщСний Π² сСкунду.

ΠŸΡ€ΠΈ этом imapsync – умная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π°, ΠΎΠ½Π° Π·Π°Π±ΠΎΡ‚Π»ΠΈΠ²ΠΎ пСрСносит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ структуру, Π½ΠΎ ΠΈ статус писСм. Если ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ письма Π±Ρ‹Π»ΠΈ ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Π² старом ящикС, Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ станут Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π½ΠΎΠ²ΠΎΠΌ. Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ нСсколько Ρ€Π°Π·, ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½ΠΎΠ²Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Π΅ письма.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Π‘Ρ‹Π»ΠΎ:

migrating-mailboxes-using-imapsync-002.png

Π‘Ρ‚Π°Π»ΠΎ:

Π’ Ρ†Π΅Π»ΠΎΠΌ – ΠΎΡ‡Π΅Π½ΡŒ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ просто пСрСнСсли ящик 1:1.

ПослС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ пСрСноса Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ ΠΎΡ‚ΠΊΡƒΠ΄Π° ΠΌΡ‹ запускали ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ появится ΠΏΠ°ΠΏΠΊΠ° LOG_imapsync, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТатся Π»ΠΎΠ³ΠΈ пСрСноса. Π‘ΠΎΠ²Π΅Ρ‚ΡƒΠ΅ΠΌ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡ… ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ. На основС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ сопоставлСниС ΠΏΠ°ΠΏΠΎΠΊ Π² источникС ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ΅ ΠΈΠ»ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΠ· синхронизации.

Для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ –exclude, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ рСгулярныС выраТСния. Π‘ΠΊΠ°ΠΆΠ΅ΠΌ, ΡƒΠ±Π΅Ρ€Π΅ΠΌ ΠΈΠ· синхронизации ΠΏΠ°ΠΏΠΊΡƒ Π‘ΠΏΠ°ΠΌ ΠΈ ΠšΠΎΡ€Π·ΠΈΠ½Ρƒ:

--exclude 'Spam|Trash'

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ соотвСтствиС ΠΏΠ°ΠΏΠΎΠΊ, Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΎΠΏΡ†ΠΈΡŽ:

--f1f2   Outbox=Sent

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ содСрТимоС ΠΏΠ°ΠΏΠΊΠΈ Outbox ящика-источника слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² ΠΏΠ°ΠΏΠΊΡƒ Sent ящика-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΎΠΏΡ†ΠΈΠ΅ΠΉ являСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ возраста писСм, допустим ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ пСрСнСсти ΠΊΠΎΡ€Ρ€Π΅ΡΠΏΠΎΠ½Π΄Π΅Π½Ρ†ΠΈΡŽ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π³ΠΎΠ΄, Π½Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ:

--maxage 365

Π’ ΠΈΡ‚ΠΎΠ³Π΅ Π±ΡƒΠ΄ΡƒΡ‚ синхронизированы Ρ‚ΠΎΠ»ΡŒΠΊΠΎ письма Π½Π΅ ΡΡ‚Π°Ρ€ΡˆΠ΅ 365 Π΄Π½Π΅ΠΉ.

А Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ? А ΠΌΠΎΠΆΠ½ΠΎ пСрСнСсти ΠΈΡ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π°Ρ€Ρ…ΠΈΠ²Π½Ρ‹ΠΉ ящик, Π² этом Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ другая опция:

--minage 365

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ пСрСнСсСм Ρ‚ΠΎΠ»ΡŒΠΊΠΎ письма с возрастом ΡΡ‚Π°Ρ€ΡˆΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π°.

Π’Π°ΠΊΠΆΠ΅ эти ΠΎΠΏΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΎΠ½ΠΈ ΡΠΎΡ‡Π΅Ρ‚Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡƒ И:

--maxage 730 --minage 365

Вакая конструкция пСрСнСсСт письма Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π° ΠΏΡ€ΠΎΡˆΠ»Ρ‹ΠΉ Π³ΠΎΠ΄ (Π½Π΅ ΡΡ‚Π°Ρ€ΡˆΠ΅ Π΄Π²ΡƒΡ… Π»Π΅Ρ‚ ΠΈ Π½Π΅ ΠΌΠΎΠ»ΠΎΠΆΠ΅ Π³ΠΎΠ΄Π°).

А Ссли ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚?

--maxage 365 --minage 730

Π’ΠΎ ΠΌΡ‹ пСрСнСсСм всС письма Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π³ΠΎΠ΄, ΠΈ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡ‚Π°Ρ€ΡˆΠ΅ Π΄Π²ΡƒΡ… Π»Π΅Ρ‚ (Π½Π΅ ΡΡ‚Π°Ρ€ΡˆΠ΅ 1 Π³ΠΎΠ΄Π° ΠΈ Π½Π΅ ΠΌΠΎΠ»ΠΎΠΆΠ΅ 2 Π»Π΅Ρ‚).

ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… ΠΎΠΏΡ†ΠΈΠΉ достаточно ΠΌΠ½ΠΎΠ³ΠΎ ΠΈ всС ΠΎΠ½ΠΈ пСрСчислСны Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, поэтому совСтуСм ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ с Π½Π΅ΠΉ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ. Π’Π°ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ΡΡ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ совСты ΠΈ Ρ€Π΅Ρ†Π΅ΠΏΡ‚Ρ‹ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… слуТб ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сСрвСров.

Π‘ синтаксисом Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈΡΡŒ, Π½ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ, Ссли ящиков ΠΌΠ½ΠΎΠ³ΠΎ? ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, для этого Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ скрипта:

#!/bin/sh
{ while IFS=';' read h1 u1 p1 h2 u2 p2 fake
do
imapsync --host1 "$h1" --user1 "$u1" --password1 "$p1" \
--host2 "$h2" --user2 "$u2" --password2 "$p2" "$@"
done
} < file.txt

Π”Π°Π½Π½Ρ‹ΠΉ скрипт Π½Π΅ Π±Π»Π΅Ρ‰Π΅Ρ‚ изысканными Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ прост ΠΊΠ°ΠΊ Ρ‚Π°Π±ΡƒΡ€Π΅Ρ‚ΠΊΠ°. На Π΅Π³ΠΎ Π²Ρ…ΠΎΠ΄ подаСтся Ρ„Π°ΠΉΠ» file.txt, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдуСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ со скриптом ΠΈ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ бСрутся адрСса ΠΈ ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΡƒΠ·Π»ΠΎΠ² источника ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Π‘Π°ΠΌ Ρ„Π°ΠΉΠ» file.txt Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ строки:

host1;user1_1;password11_1;host2;user2_1;password2_1;
host1;user1_2;password11_2;host2;user2_2;password2_2;
host1;user1_3;password11_3;host2;user2_3;password2_3;
host1;user1_4;password11_4;host2;user2_4;password2_4;

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ послС “$@” ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ ΠΏΡ€ΠΈ запускС скрипта, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π²ΠΎΠΉΠ΄ΡƒΡ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ $@.

Π­Ρ‚ΠΎ достаточно ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ скрипт. Π‘ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ скриптов Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π²Β Wiki Zimbra. Ну ΠΈ ΠΏΠΎΠΌΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π² Linux Π½Π΅Ρ‚ Π΄ΠΎΠ³ΠΌ ΠΈ Π΅Π΄ΠΈΠ½Ρ‹Ρ… способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ, Π²Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π°ΠΌ.

#!/bin/cat 
# $Id: INSTALL.Ubuntu.txt,v 1.23 2022/10/13 00:16:33 gilles Exp gilles $

This documentation is also located online at 
https://imapsync.lamiral.info/INSTALL.d/
https://imapsync.lamiral.info/INSTALL.d/INSTALL.Ubuntu.txt

=======================================================================
         Installing imapsync on Ubuntu 16.04 or higher
=======================================================================

Here is  the command to install imapsync dependencies,
you need root privilege to run them.

This command installs standard Ubuntu packages:

  sudo apt-get install  \
libauthen-ntlm-perl     \
libclass-load-perl      \
libcrypt-openssl-rsa-perl \
libcrypt-ssleay-perl    \
libdata-uniqid-perl     \
libdigest-hmac-perl     \
libdist-checkconflicts-perl \
libencode-imaputf7-perl     \
libfile-copy-recursive-perl \
libfile-tail-perl       \
libio-compress-perl     \
libio-socket-inet6-perl \
libio-socket-ssl-perl   \
libio-tee-perl          \
libjson-webtoken-perl   \
libmail-imapclient-perl \
libmodule-scandeps-perl \
libnet-dbus-perl        \
libnet-ssleay-perl      \
libpar-packer-perl      \
libproc-processtable-perl \
libreadonly-perl        \
libregexp-common-perl   \
libsys-meminfo-perl     \
libterm-readkey-perl    \
libtest-fatal-perl      \
libtest-mock-guard-perl \
libtest-mockobject-perl \
libtest-pod-perl        \
libtest-requires-perl   \
libtest-simple-perl     \
libunicode-string-perl  \
liburi-perl             \
libtest-nowarnings-perl \
libtest-deep-perl       \
libtest-warn-perl       \
make                    \
time                    \
cpanminus

In case you want to update the Perl module 
Mail::IMAPClient, a major module for imapsync,
the following command installs it "manually":

  sudo cpanm Mail::IMAPClient

After installing the dependencies, imapsync should be working.

You don't have to be root to test and use imapsync.
Take the compressed tarball called imapsync-2.xxx.tgz
where 2.xxx is the version number. 
Untar the tarball where you want:

  cd 
  tar xzvf  imapsync-2.xxx.tgz

Go into the directory imapsync-2.xxx

  cd imapsync-2.xxx

A dependencies test that shows also the basic example:

  ./imapsync

A live test showing imapsync job:

  ./imapsync --testslive

Now the install command (need root priviledges again):

  cp imapsync /usr/bin/

That's finished for the installation part.
You can use imapsync.

Now go to read http://imapsync.lamiral.info/#doc
start with the tutorial.

=======================================================================
              After installing the dependencies
=======================================================================

You don't have to be root to test and use imapsync.

Take imapsync either on github:

  wget -N https://raw.githubusercontent.com/imapsync/imapsync/master/imapsync

or be on the cutting edge with the upstream site:

  wget -N https://imapsync.lamiral.info/imapsync

Add execution permission to the downloaded script:

  chmod +x imapsync
  
Check the dependencies and print also the basic example:

  ./imapsync

Perform a live test showing imapsync job:

  ./imapsync --testslive

Now install imapsync on the system (need root priviledges again):

  cp imapsync /usr/bin/

That's finished for the installation part.
You can now use imapsync without knowing where it is located
on the system:

  imapsync 

Now go read the menu http://imapsync.lamiral.info/#doc
and start with the tutorial 
https://imapsync.lamiral.info/doc/TUTORIAL_Unix.html

Feedback is welcome!


=======================================================================
=======================================================================

создадим Ρ„Π°ΠΉΠ» Β«mails.csvΒ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ каТдая строка Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄:

old_login|old_pass|new_login|new_pass|

Π—Π΄Π΅ΡΡŒ Β«old_loginΒ» ΠΈ Β«old_passΒ» β€” Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° старом сСрвСрС, Π° Β«new_loginΒ» ΠΈ Β«new_passΒ» β€” Π»ΠΎΠ³ΠΈΠ½ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Π½ΠΎΠ²ΠΎΠΌ сСрвСрС.

Если Π²Ρ‹ ΠΌΠΈΠ³Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ Π² Google Suite Ρ‚ΠΎ Π²Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΉΡ‚ΠΈ Π² настройки бСзопасности -> Β«ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ настройки» -> Β«ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉΒ» ΠΈ Π½Π° врСмя ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ прилоТСния, Π½Π΅ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎΠΉ Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ. Π‘Π΅Π· этой настройки ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ получится ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ IMAP.
ПослС этого остаётся Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ нСбольшой скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ imapsync для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Ρ‹ΠΉ листинг скрипта:

#!/bin/bash

cd `dirname $0`

for line in `cat mails.csv | grep -v ^#`; do
M_USER=`echo ${line} | cut -d '|' -f1`
M_PASS=`echo ${line} | cut -d '|' -f2`
N_USER=`echo ${line} | cut -d '|' -f3`
N_PASS=`echo ${line} | cut -d '|' -f4`
echo "Processing ${M_USER}..."
./imapsync \
--host1 mail.company.com --user1 ${M_USER} --password1 ${M_PASS} \
--host2 imap.gmail.com:993 --user2 ${N_USER} --password2 ${N_PASS} --ssl2
if [ $? -ne "0" ]; then
echo ${M_USER} >> mail_errors
fi
done

ПослС выполнСния скрипта Π² Ρ„Π°ΠΉΠ» Β«mail_errorsΒ» Π±ΡƒΠ΄ΡƒΡ‚ записаны Π»ΠΎΠ³ΠΈΠ½Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… пСрСнос ΠΏΠΎΡ‡Ρ‚Ρ‹ Π½Π΅ удался. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ это связано Π»ΠΈΠ±ΠΎ с большим ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ ΠΏΠΎΡ‡Ρ‚Ρ‹ (ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΊΠ²ΠΎΡ‚Ρ‹), Π»ΠΈΠ±ΠΎ с Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ΠΌ спСцсимволов Π² паролях. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ящиков ΠΈ хотя Π±Ρ‹ Π½Π° врСмя ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π° ящики ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, Π½Π΅ содСрТащиС символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈ подстановкС Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π½Π°ΠΊ Π΄ΠΎΠ»Π»Π°Ρ€Π° ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ слэш).

Π’ послСдних рСвизиях mailsync появилась ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ΠΎΠ² GMail ΠΈ MS Exchange. Однако Π² силу ряда ΠΏΡ€ΠΈΡ‡ΠΈΠ½ Ρƒ Π°Π²Ρ‚ΠΎΡ€Π° этих строк Π½Π΅ Π±Ρ‹Π»ΠΎ возмоТности ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π».

Π‘Π²Π΅ΠΆΠΈΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

Подписка

Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ

Π ΡƒΠ±Ρ€ΠΈΠΊΠΈ

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΠ΅

webdav
Previous Story

ΠŸΠ°ΠΌΡΡ‚ΠΊΠ° ΠΏΠΎ использованию WebDAV

Next Story

ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ ΠΏΠ°ΠΏΠΊΠΈ home Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ диск

Latest from Blog

PostgresSQL-16 + 1C

Для Π½Π°Ρ‡Π°Π»Π°, Π² ΠΊΠ°ΠΊΠΎΠΉ срСдС Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: Наша Π·Π°Π΄Π°Ρ‡Π°: ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Debian Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ установим ΠΊΠ°ΠΊ PostgreSQL Ρ‚Π°ΠΊ ΠΈ Π‘Π΅Ρ€Π²Π΅Ρ€ 1Π‘ установлСн (Установка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ «локаль»: Как Π²ΠΈΠ΄ΠΈΠΌ

POSTGRESQL 16 + CΠ•Π Π’Π•Π  1Π‘ X64 И 1Π‘ 8.3.24

Для Π½Π°Ρ‡Π°Π»Π°, Π² ΠΊΠ°ΠΊΠΎΠΉ срСдС Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ: Наша Π·Π°Π΄Π°Ρ‡Π°: ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Debian Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ установим ΠΊΠ°ΠΊ PostgreSQL Ρ‚Π°ΠΊ ΠΈ Π‘Π΅Ρ€Π²Π΅Ρ€ 1Π‘ установлСн (Установка ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). Для Π½Π°Ρ‡Π°Π»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ «локаль»: Как Π²ΠΈΠ΄ΠΈΠΌ

HADOOP

HΠ°Π±ΠΎΡ€ инструмСнтов для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ обСспСчСния срСды для ΠΈΡ… запуска Π² распрСдСлСнной срСдС. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ большиС кластСры ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ процСсс управлСния ΠΈΠΌΠΈ. ЯвляСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· элСмСнтов ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ….Β Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π°Β JavaΒ Ρ„ΠΎΠ½Π΄ΠΎΠΌΒ Apache

ОбновлСниС mySQL с вСрсии 5.7 Π΄ΠΎ 8.0

Π‘Π°ΠΌΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, поэтому ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ шаги ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Π½Π° ΠΎΠ±Ρ‰ΡƒΡŽ схСму ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π°Π΄Π°ΠΏΡ‚Π°Ρ†ΠΈΠΉ. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² MySQL ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с
Go toTop