Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΡΠ΅ ΠΏΠΎΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΡΠ²ΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠΎΠΌΠΎΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° IMAPSync ΡΡΠ΅Π· ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΠΠ° ΡΠ΅Π»Π΅Π²ΠΈΡ ΡΡΡΠ²ΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΡΠ΅ ΠΏΠΎΡΠ΅Π½ΡΠΊΠ° ΠΊΡΡΠΈΡ Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅ ΠΈ ΠΏΠ°ΡΠΎΠ»Π°. ΠΡΠ΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Imapsync, Π½Π΅ Π·Π°Π±ΡΠ°Π²ΡΠΉΡΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠ΅ (https://imapsync.lamiral.info/#install).
Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° Π·Π°Π±ΡΠ°Π½ΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠΎΠ»ΠΈ Π·Π° ΠΈΠΌΠ΅ΠΉΠ»ΠΈ Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ Π² ΡΠΊΡΠΈΠΏΡΠ°, ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ Π΅ Π΄Π΅Π»Π΅Π³ΠΈΡΠ°Π½ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ. ΠΠ° ΡΠ°Π·ΠΈ ΡΠ΅Π» Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½ ΡΠ΅Π±-Π±Π°Π·ΠΈΡΠ°Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΡΡΡΠΎΡΡ ΡΠ΅ ΠΎΡ ΠΌΠΎΠ΄ΡΠ» Π·Π° ΡΠΎΡΠΌΡΠ»ΡΡΠΈ (gis.html) ΠΈ ΠΌΠΎΠ΄ΡΠ» Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ imapsync (gis.php). ΠΠΎΠΏΡΠ»Π²Π°Π½Π΅ ΡΡΡΠ²ΡΡΠΈ IMAP ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ° ΡΡΠ΅Π· Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ Π·Π° ΠΈΠΌΠ΅ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΊΠ° ΠΊΡΡΠΈΡ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Fetchmail ΠΊΠ°ΡΠΎ ΠΏΠ»ΡΠ³ΠΈΠ½ Π·Π° Roundcube Π½Π΅ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ Π΄Π° Π½Π°ΠΌΠ΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π΅Π½ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅Π½ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΠΎΠ·ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
Π£Π΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡΡ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ ΠΏΠΎΠ»Π΅ΡΠ° Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈΡΠ΅ ΠΊΡΡΠΈΠΈ, ΠΈΠ·Ρ ΠΎΠ΄Π½Π° ΠΎΠ±Π»Π°ΡΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈ Π±ΡΡΠΎΠ½ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ (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))."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) ΠΏΡΠΈΠ΅ΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄: Π΄Π°Π½Π½ΠΈ Π·Π° Π²Ρ ΠΎΠ΄ ΠΈ ΠΏΠ°ΡΠΎΠ»ΠΈ, ΡΡΡΠ²ΡΡΠΈ Π·Π° ΠΈΠΌΠ°ΠΏ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΎ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½Π°ΡΠ° ΠΈ ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈ ΠΊΡΡΠΈΠΈ.
#!/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
