In questo articolo verrΓ trattato il modo di trasferire la posta tra diversi server usando l'utility IMAPSync tramite un'interfaccia utente semplice.
Sul server di destinazione Γ¨ necessario avere una casella con le credenziali corrette. Prima di utilizzare Imapsync, Γ¨ fondamentale 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, Γ¨ stata sviluppata un'interfaccia web che consiste in un modulo di formulario (gis.html) e un modulo per l'esecuzione dello script imapsync (gis.php). La compilazione server La configurazione di imap puΓ² essere automatizzata analizzando il contenuto del campo con il nome della casella di posta. L'uso di Fetchmail come plugin di Roundcube non Γ¨ considerato, poichΓ© non sono riuscito a trovare una dettagliata analisi connessa a questa questione.
L'interfaccia web consiste in campi con informazioni sulle caselle di posta, un'area di output per l'esecuzione 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 sorgente:<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 di destinazione:<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="Ripristino">
<input type="button" value="Mostra cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="it"/></form>
</body>
</html>Modulo per l'esecuzione 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');
//Π²ΡΠ²ΠΎΠ΄ Π² ΠΎΠ±Π»Π°ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
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!");
?>
Lo script di migrazione della casella di posta (startimapsync.sh) accetta parametri da riga di comando: credenziali e password, server imap delle caselle di partenza e di destinazione rispettivamente.
#!/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 sincronia della cartella delle email in arrivo
--folderfirst INBOX
#incontro delle cartelle
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Inviati/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Cestino/"
--regextrans2 "s/&BCEEPwQwBDw-/Spam/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Bozze/"
#ricevi correttamente le email non lette nella Posta in arrivo
--regexflag 's/\Unseen//g'
#Confronto tra le email ricevute e inviate in base al numero identificativo
--useheader Message-Id
Fonte: habr.com
