I den här artikeln kommer vi att gå igenom hur man migrerar e-post mellan olika servrar med hjälp av verktyget IMAPSync via ett enkelt användargränssnitt.
På destinationsservern måste det finnas en post med rätt inloggning och lösenord. Innan du använder Imapsync måste du se till att installera det (https://imapsync.lamiral.info/#install).
På grund av organisationens förbud mot att använda anställdas e-postlösenord i skriptet övergår vi migreringsprocessen till användaren. För detta har ett webbgränssnitt utvecklats som består av en formulärmodul (gis.html) och en modul för att köra skriptet imapsync (gis.php). Fyllning servrar IMAP kan automatiseras genom att analysera innehållet i fältet för e-postlådans namn. Användning av Fetchmail som plugin för Roundcube övervägs inte, eftersom jag inte har hittat en detaljerad sammanhängande analys av detta ämne.
Webbgränssnittet består av fält med information om e-postlådor, ett område för att visa utförandet av operationen och kontrollknappar (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 av e-postlåda</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Källa e-postlåda:<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Lösenord:<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>Mål e-postlåda:<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Lösenord:<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>Resultat av utförande:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Utför" onclick="Complete();">
<input type="reset" value="Återställning">
<input type="button" value="Visa cookie" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="sv"/></form>
</body>
</html>Modulen för att köra skriptet 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!");
?>
Skriptet för migrering av e-postlådan (startimapsync.sh) tar emot kommandoradsparametrar: inloggningar och lösenord, IMAP-servrar för käll- och målpostlådor respektive.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4
#использование шифрования при подключении к servern
--ssl1 --ssl2
#mappning av mappar
--automap
#den första synkroniserade mappen för inkommande
--folderfirst INBOX
#mappning av mappar
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/&BCEEPwQwBDw-/Junk/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
#vi tar emot olästa mejl i Inkorgen korrekt
--regexflag 's/\Unseen//g'
#Jämförelse av mottagna och skickade mejl utifrån Identifieringsnummer
--useheader Message-Id
Källa: habr.com
