Cet article examina la méthode de transfert d'emails entre différents serveurs à l'aide de l'outil IMAPSync à travers une interface utilisateur primitive.
Il est nécessaire d'avoir une boîte aux lettres avec le login et le mot de passe requis sur le serveur de destination. Avant d'utiliser Imapsync, il est impératif de l'installer (https://imapsync.lamiral.info/#install).
En raison de l'interdiction par l'organisation d'utiliser les mots de passe des boîtes aux lettres des employés dans le script, le processus de migration est confié à l'utilisateur. Pour cela, une interface web a été développée, composée d'un module de formulaire (gis.html) et d'un module de lancement du script imapsync (gis.php). Remplissage serveurs L'imap peut être automatisé en analysant le contenu du champ portant le nom de la boîte aux lettres. L'utilisation de Fetchmail comme plugin pour Roundcube n'est pas envisagée, car je n'ai pas trouvé d'analyse détaillée et cohérente de ce sujet.
L'interface web se compose de champs contenant des informations sur les boîtes aux lettres, d'une zone d'affichage des opérations en cours et de boutons de contrôle (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>Migration de la boîte aux lettres</h1>
<form name="maildata" action="">
<table>
<tr><td><b>Boîte aux lettres source :<b></td>
<td><input name="mail1" size="20" value=""
<tr><td><b>Mot de passe :<b>
<td><input type="password" name="pass1" size="20" value=""
<tr><td><b>Serveur IMAP :<b></td>
<td><input name="msrv1" size="20" value=""<td>
<tr><td><b>Boîte aux lettres cible :<b></td>
<td><input name="mail2" size="20" value=""
<tr><td><b>Mot de passe :<b>
<td><input type="password" name="pass2" size="20" value=""
<tr><td><b>Serveur IMAP :<b></td>
<td><input name="msrv2" size="20" value=""<td>
</table>
<p>Résultat de l'exécution :<br/><textarea id="output" style="width: 50%; height: 25em;"></textarea></p>
<input type="button" value="Exécuter" onclick="Complete();">
<input type="reset" value="Réinitialiser">
<input type="button" value="Afficher les cookies" onclick="ShowCookie();">
<input type="hidden" name="trp-form-language" value="fr"/></form>
</body>
</html>Module de lancement du 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');
//affichage dans la zone de messages
function echoEvent($datatext) {
echo "data: ".implode("ndata: ", explode("n", $datatext))."nn";
} //echoEvent
echoEvent("Démarrer!");
//formons la chaîne de lancement du script imapsync avec des paramètres
$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);
//lancer le script sh depuis la ligne de commande linux
$proc = popen($strexe,'r');
//il peut y avoir des limitations php, donc il suffit d'afficher le résultat de la migration
while (!feof($proc)) {
echoEvent(fread($proc, 4096));
}
echoEvent("Terminé!");
?php
Le script de migration de boîte aux lettres (startimapsync.sh) accepte des paramètres de ligne de commande : les logins et mots de passe, ainsi que les serveurs imap des boîtes d'origine et de destination.
#!/bin/bash
#переход в каталог откуда был запущен данный скрипт
cd `dirname $0`
#запуск imapsync с нужными параметрами
/home/user/imapsync/./imapsync
#сервер начального почтового ящика, логин, пароль
--host1 $5:993 --user1 $1 --password1 $2
#сервер конечного почтового ящика, логин, пароль
--host2 $6:993 --user2 $3 --password2 $4
#использование шифрования при подключении к serveur
--ssl1 --ssl2
#correspondance des dossiers
--automap
#premier dossier à synchroniser pour les entrants
--folderfirst INBOX
#correspondance des dossiers
--regextrans2 "s/BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/Sent/"
--regextrans2 "s/BBoEPgRABDcEOAQ9BDA-/Trash/"
--regextrans2 "s/BCEEPwQwBDw-/Junk/"
--regextrans2 "s/BCcENQRABD0EPgQyBDgEOgQ4-/Drafts/"
#nous acceptons correctement les courriels non lus dans les entrants
--regexflag 's/\Unseen//g'
#Comparaison des courriels reçus et envoyés selon le paramètre Identification
--useheader Message-Id
Source : habr.com
