Denne artikel vil forklare, hvordan man flytter e-mails mellem forskellige servere ved hjælp af IMAPSync-værktøjet via et enkelt brugerinterface.
På destinationsserveren skal der være en konto med den nødvendige brugernavn og adgangskode. Før brugen af Imapsync skal det installeres (https://imapsync.lamiral.info/#install).
På grund af organisationens forbud mod at bruge adgangskoder til medarbejderes e-mailkonti i scriptet, overlader vi migrationsprocessen til brugeren. Derfor er der udviklet et webbrugerinterface, der består af et formularmodul (gis.html) og et modul til at starte imapsync-scriptet (gis.php). Udfyldning servere imap kan automatiseres ved at analysere indholdet af feltet med e-mailkontonavnet. Brugen af Fetchmail som plugin til Roundcube overvejes ikke, da jeg ikke har fundet en detaljeret sammenhængende gennemgang af dette emne.
Webbrugergrænsefladen består af felter med oplysninger om e-mailkonti, et område til output af operationens udførelse og kontrolknapper (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>Migrering af e-mailkonto</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Oprindelig e-mailkonto:<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Adgangskode:<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>Slute-mailkonto:<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Adgangskode:<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>Resultatet af udførelsen:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Execute" onclick="Complete();">
<input type="reset" value="Reset">
<input type="button" value="Vis cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="da"/></form>
</body>
</html>Modulet til at starte imapsync-scriptet (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 til beskedområdet
function echoEvent($datatext) {
echo "data: ".implode("ndata: ", explode("n", $datatext))."nn";
} //echoEvent
echoEvent("Start!");
//dan formulere vi startkommandoen for imapsync-scriptet med parametre
$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);
//starter sh-scriptet fra kommandolinjen linux
$proc = popen($strexe,'r');
//der kan være php-begrænsninger, så det er tilstrækkeligt at udskrive resultatet af migrationsafslutningen
while (!feof($proc)) {
echoEvent(fread($proc, 4096));
}
echoEvent("Finish!");
?>
E-mail migreringsscriptet (startimapsync.sh) accepterer kommandolinjeparametre: brugernavne og adgangskoder, imap-servere for de oprindelige og endelige konti henholdsvis.
#!/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
#mapning af mapper
--automap
#den første mapper der synkroniseres af indbakken
--folderfirst INBOX
#mapning af mapper
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sendt/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Papirkurv/"
--regextrans2 "s/&BCEEPwQwBDw-/Uønsket/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Udkast/"
#korrekt modtagning af ulæste beskeder i indbakken
--regexflag 's/\Unseen//g'
#Sammenligning af modtagne og sendte mails efter identifikationsnummer
--useheader Message-Id
Kilde: habr.com
