În acest articol va fi abordată metoda de transfer a emailurilor între diferite servere folosind utilitarul IMAPSync printr-o interfață de utilizator simplă.
Pe serverul de destinație trebuie să existe o cutie poștală cu loginul și parola corespunzătoare. Înainte de utilizarea Imapsync, este necesar să-l instalați (https://imapsync.lamiral.info/#install).
Din cauza interdicției impuse de organizație de a folosi parolele conturilor de email ale angajaților în script, procesul de migrație este încredințat utilizatorului. Pentru aceasta, a fost dezvoltat un web-interfață pentru utilizatori, care constă într-un modul de formular (gis.html) și un modul pentru lansarea scriptului imapsync (gis.php). Completarea servere imap poate fi automatizată analizând conținutul câmpului cu numele cutiei poștale. Utilizarea Fetchmail ca plugin pentru Roundcube nu este considerată, deoarece nu am găsit o analiză detaliată a acestei probleme.
Web-interfața constă din câmpuri cu informații despre cutiile poștale, o zonă de ieșire pentru executarea operațiunii și butoane de control (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>Migrarea căsuței poștale</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Căsuța poștală sursă:<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Parolă:<b>
<td><input type="password" name="pass1" size="20" value=""
<tr><td><b>Server IMAP:<b></td>
<td><input name="msrv1" size="20" value=""<td>
<tr><td><b>Căsuța poștală finală:<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Parolă:<b>
<td><input type="password" name="pass2" size="20" value=""
<tr><td><b>Server IMAP:<b></td>
<td><input name="msrv2" size="20" value=""<td>
</table>
<p>Rezultatul execuției:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Executați" onclick="Complete();">
<input type="reset" value="Resetare">
<input type="button" value="Arată cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="ro"/></form>
</body>
</html>Modulul de lansare a scriptului 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');
//output to messages area
function echoEvent($datatext) {
echo "data: ".implode("ndata: ", explode("n", $datatext))."nn";
} //echoEvent
echoEvent("Start!");
//forming the command string for imapsync script with parameters
$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);
//start sh script from linux command line
$proc = popen($strexe,'r');
//there may be php limitations, so it's enough to output the result of the migration completion
while (!feof($proc)) {
echoEvent(fread($proc, 4096));
}
echoEvent("Finish!");
?>
Scriptul de migrare a cutiilor de email (startimapsync.sh) primește parametrii din linia de comandă: loginuri și parole, serverele imap de origine și destinație ale cutiilor respective.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4
#использование шифрования при подключении к server
--ssl1 --ssl2
#Maparea folder
--automap
#First synchronize the incoming folder
--folderfirst INBOX
#Maparea folder
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/&BCEEPwQwBDw-/Junk/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
#Correctly receive unread emails in Incoming
--regexflag 's/\Unseen//g'
#Comparison of received and sent emails by Identification number
--useheader Message-Id
Sursa: habr.com
