In diesem Artikel wird erläutert, wie man E-Mails zwischen verschiedenen Servern mithilfe des IMAPSync-Tools über eine einfache Benutzeroberfläche übertragen kann.
Auf dem Zielserver muss ein Postfach mit den entsprechenden Anmeldedaten vorhanden sein. Vor der Verwendung von Imapsync muss es unbedingt installiert werden (https://imapsync.lamiral.info/#install).
Aufgrund des Verbots durch die Organisation, Passwörter der Mitarbeiter-E-Mail-Postfächer im Skript zu verwenden, übergeben wir den Migrationsprozess dem Benutzer. Dazu wurde eine Benutzer-Weboberfläche entwickelt, die aus einem Formularmodul (gis.html) und einem Modul zum Starten des Imapsync-Skripts (gis.php) besteht. Das Ausfüllen Server der IMAP-Daten kann automatisiert werden, indem der Inhalt des Feldes mit dem Namen des Postfachs analysiert wird. Die Verwendung von Fetchmail als Plugin für Roundcube wird nicht in Betracht gezogen, da ich keine detaillierte und zusammenhängende Analyse zu diesem Thema gefunden habe.
Die Weboberfläche besteht aus Feldern mit Informationen zu den Postfächern, einem Bereich zur Anzeige der Ausführung des Vorgangs und Steuerungsknöpfen (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>E-Mail-Postfach migrieren</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Quell-E-Mail-Postfach:<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Passwort:<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>Ziel-E-Mail-Postfach:<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Passwort:<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>Ausführungsergebnis:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Ausführen" onclick="Complete();">
<input type="reset" value="Zurücksetzen">
<input type="button" value="Cookies anzeigen" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="de"/></form>
</body>
</html>Modul zum Starten des Imapsync-Skripts (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!");
?>
Das Skript zur Migration von Mailboxen (startimapsync.sh) akzeptiert Kommandozeilenparameter: Benutzerkonten und Passwörter sowie die IMAP-Server der Quell- und Zielpostfächer.
#!/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
# Ordnerzuordnung
--automap
# Zuerst den Ordner für eingehende Mails synchronisieren
--folderfirst INBOX
# Ordnerzuordnung
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/&BCEEPwQwBDw-/Junk/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
# Unreadene E-Mails im Posteingang korrekt akzeptieren
--regexflag 's/\Unseen//g'
# Vergleich von empfangenen und gesendeten E-Mails anhand der Identifikationsnummer
--useheader Message-Id
Quelle: habr.com
