Αυτό το άρθρο θα εξετάσει τον τρόπο μεταφοράς αλληλογραφίας μεταξύ διαφορετικών διακομιστών χρησιμοποιώντας το βοηθητικό πρόγραμμα IMAPSync μέσω μιας πρωτόγονης διεπαφής χρήστη.
Στον διακομιστή προορισμού πρέπει να έχετε ένα κουτί με τα απαιτούμενα στοιχεία σύνδεσης και κωδικό πρόσβασης. Πριν χρησιμοποιήσετε το Imapsync, πρέπει να το εγκαταστήσετε (https://imapsync.lamiral.info/#install).
Δεδομένου ότι ο οργανισμός απαγορεύει τη χρήση κωδικών πρόσβασης email υπαλλήλων στο σενάριο, η διαδικασία μετεγκατάστασης ανατίθεται στον χρήστη. Για τον σκοπό αυτό έχει αναπτυχθεί ένα περιβάλλον εργασίας χρήστη μέσω διαδικτύου, το οποίο αποτελείται από μια ενότητα φόρμας (gis.html) και μια ενότητα εκκίνησης σεναρίων imapsync (gis.php). Συμπλήρωση. διακομιστές Το IMAP μπορεί να αυτοματοποιηθεί αναλύοντας τα περιεχόμενα του πεδίου ονόματος γραμματοκιβωτίου. Η χρήση του Fetchmail ως πρόσθετου Roundcube δεν λαμβάνεται υπόψη, καθώς δεν μπόρεσα να βρω μια λεπτομερή, συνεκτική ανάλυση αυτού του ζητήματος.
Η διεπαφή ιστού αποτελείται από πεδία με πληροφορίες για γραμματοκιβώτια, μια περιοχή εξόδου εκτέλεσης λειτουργίας και κουμπιά ελέγχου (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>Миграция почтового ящика</H1>
<FORM NAME="maildata">
<TABLE>
<TR><TD><B>Исходный почтовый ящик:<B></TD>
<TD><INPUT NAME="mail1" SIZE=20 VALUE=""
<TR><TD><B>Пароль:<B>
<TD><INPUT TYPE="password" NAME="pass1" SIZE=20 VALUE=""
<TR><TD><B>IMAP сервер:<B></TD>
<TD><INPUT NAME="msrv1" SIZE=20 VALUE=""<TD>
<TR><TD><B>Конечный почтовый ящик:<B></TD>
<TD><INPUT NAME="mail2" SIZE=20 VALUE=""
<TR><TD><B>Пароль:<B>
<TD><INPUT TYPE="password" NAME="pass2" SIZE=20 VALUE=""
<TR><TD><B>IMAP сервер:<B></TD>
<TD><INPUT NAME="msrv2" SIZE=20 VALUE=""<TD>
</TABLE>
<p>Результат выполнения:<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<INPUT TYPE="button" VALUE="Выполнить" onClick="Complete();">
<INPUT TYPE="reset" VALUE="Сброс">
<INPUT TYPE="button" VALUE="Показать cookie" onClick="ShowCookie();">
</FORM>
</body>
</html>Εκκίνηση σεναρίων 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!");
?>
Το σενάριο μετεγκατάστασης γραμματοκιβωτίου (startimapsync.sh) δέχεται παραμέτρους της γραμμής εντολών: συνδέσεις και κωδικούς πρόσβασης, διακομιστές εικόνας των γραμματοκιβωτίων προέλευσης και προορισμού, αντίστοιχα.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4
#использование шифрования при подключении к серверу
--ssl1 --ssl2
#сопоставление папок
--automap
#первой синхронизируем папку входящих
--folderfirst INBOX
#сопоставление папок
--regextrans2 "s/&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/&BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/&BCEEPwQwBDw-/Junk/"
--regextrans2 "s/&BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
#правильно принимаем не прочитанные письма во Входящих
--regexflag 's/\Unseen//g'
#Сравнение полученных и отправленных писем по параметру Идентификационный номер
--useheader Message-Id
Πηγή: www.habr.com
