Selles artiklis räägitakse, kuidas transportida e-kirju erinevate serverite vahel, kasutades IMAPSynci lihtsat kasutajaliidest.
Sihtserveril peab olema jaotus õige kasutajanime ja parooliga. Enne Imapsynci kasutamist tuleb see kindlasti installida (https://imapsync.lamiral.info/#install).
Kuna organisatsioon keelab töötajate postkastide paroolide kasutamise skriptis, antakse migratsiooniprotsess kasutaja kätte. Selleks on välja töötatud veebikasutajaliides, mis koosneb vormimoodulist (gis.html) ja imapsynci skripti käivitamise moodulist (gis.php). Täitmine serverite IMAPi saab automatiseerida, analüüsides posti nime väljad. Fetchmaili kasutamine roundcube'i plugina ei ole arvesse võetud, kuna sellele pole leitud põhjalikku ja sidusat analüüsi.
Veebikasutajaliides koosneb postkasti teabest, ülesande täitmise väljundpiirkonnast ja juhtnuppudest (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>Postkasti migratsioon</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Algne postkast:<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Parool:<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>Lõpp-postkast:<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Parool:<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>Tegevuse tulemus:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Tehtud" onclick="Complete();">
<input type="reset" value="Nulli">
<input type="button" value="Kuva küpsised" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="et"/></form>
</body>
</html>Imapsynci skripti käivitamise moodul (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!");
?>
Postkasti migreerimise skript (startimapsync.sh) võtab vastu käsurea parameetreid: logiinid ja paroolid, samuti lähtete ja sihtkoha IMAP-serverid.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4
#использование шифрования при подключении к serverile
--ssl1 --ssl2
#kaustamise kaustade määramine
--automap
#esimese sünkroniseeritava kausta määramine
--folderfirst INBOX
#kaustade määramine
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/&BCEEPwQwBDw-/Junk/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
#korrektne vastuvõtt lugemata kirjad Saates
--regexflag 's/\Unseen//g'
#Saadetud ja saadud kirjade võrdlemine identifitseerimisnumbri järgi
--useheader Message-Id
Allikas: habr.com
