In questo articolo verrà esaminato il metodo di trasferimento della posta tra diversi server utilizzando l'utility IMAPSync tramite una semplice interfaccia utente.
Sul server di destinazione è necessario avere una casella con le credenziali e la password richieste. Prima di utilizzare Imapsync, è necessario installarlo (https://imapsync.lamiral.info/#install).
A causa del divieto da parte dell'organizzazione di utilizzare le password delle caselle di posta dei dipendenti nello script, il processo di migrazione viene trasferito all'utente. A tal fine, è stato sviluppato un'interfaccia web per l'utente, composta da un modulo di modulo (gis.html) e un modulo di avvio dello script imapsync (gis.php). Compilazione server imap può essere automatizzato analizzando il contenuto del campo con il nome della casella postale. L'uso di Fetchmail come plugin di roundcube non è preso in considerazione, poiché non ho trovato un'analisi dettagliata di questa questione.
L'interfaccia web è composta da campi con informazioni sulle caselle di posta, un'area di output dell'operazione e pulsanti di controllo (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>Migrazione della casella di posta</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Casella di posta di origine:<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Password:<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>Casella di posta finale:<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Password:<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>Risultato dell'esecuzione:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Esegui" onclick="Complete();">
<input type="reset" value="Ripristina">
<input type="button" value="Mostra cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="it"/></form>
</body>
</html>Modulo di avvio dello script 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 nell'area dei messaggi
function echoEvent($datatext) {
echo "data: ".implode("ndata: ", explode("n", $datatext))."nn";
} //echoEvent
echoEvent("Inizio!");
//formiamo la stringa di avvio dello script imapsync con i parametri
$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);
//avviamo lo script sh dalla riga di comando linux
$proc = popen($strexe,'r');
//possono esserci limitazioni php, quindi è sufficiente visualizzare il risultato della fine della migrazione
while (!feof($proc)) {
echoEvent(fread($proc, 4096));
}
echoEvent("Fine!");
?>
Lo script di migrazione della casella di posta (startimapsync.sh) accetta parametri della riga di comando: nomi utente e password, rispettivamente, per i server imap delle caselle di origine e di destinazione.
#!/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
#mappatura delle cartelle
--automap
#prima sincronizziamo la cartella degli ingressi
--folderfirst INBOX
#mappatura delle cartelle
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/&BCEEPwQwBDw-/Junk/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
#accettiamo correttamente le e-mail non lette negli ingressi
--regexflag 's/\Unseen//g'
#Confronto delle e-mail ricevute e inviate per il parametro ID
--useheader Message-Id
Fonte: habr.com
