Lors du transfert de compte Imap entre deux serveurs, lors d’un changement de matériel par exemple, ou pour une sauvegarde distante de ses mails, IMAPSYNC est le soft qu’il vous faut ;)
En effet j’heberge mes mails en Local sur ma SME-SERVER, cependant je souhaite en faire une syncro sur internet pour avoir une sauvegarde permanente de mes mails, au cas ou un disque souhaiterait me lacher ;) (bien que je sois en RAID 1, j’ai toujours voulu avoir les bretelles et la ceinture)
Imapsync va fonctionner d’une manière récursive dans votre boite mail, et il ne copiera dans la boite distante, que les mails qui n’y sont pas, autant dire qu’il est adapté au réseau ADSL avec peu de débit.
La sécurité n’est pas de reste, puisque on peut (et on DOIT) activer le mode SSL qui va permettre d’avoir une communication chiffrée entre les deux serveurs rendant plus difficile l’interception des messages, bien évidemment cela suppose que le support de compte IMAPS soit installé sur vos serveurs.
Le principe de base est simple, vous aller invoquer imapsync avec des arguments pour chaque boite Mail, si vous voulez en automatique dans le dossier /etc/cron.daily (ainsi tous les jours une synchronisation se fera automatiquement), ce faisant tous les flags seront respectés (lus, effacés……) ce qui vous permet de retrouver tous votre correspondance dans le même état d’un coté ou de l’autre du tuyau Internet
1.l’utilisation de base
Pour installer Imapsync sur la SME-SERVER
//usr/bin/imapsync --noauthmd5 --host1 localhost --port1 993 --ssl1 \ --user1 TOTO --password1 TOTO --host2 TOTO.COM --port2 993 --ssl2 \ --user2 TOTO@TOTO.com --password2 TOTO --noauthmd5 --delete2
--host1 localhost : votre serveur source mais il peut être distant --port1 993 --ssl1 : serveur source, activation du SSL, sinon utilisez --port 143 --user1 TOTO --password1 TOTO : définition du compte imap source (avec la sme on ne met pas le domaine avec le user) --host2 TOTO.COM : votre serveur destination --port2 993 --ssl2 : serveur destination, activation du SSL, sinon utilisez --port 143 --user2 TOTO@TOTO.com --password2 TOTO : definition du compte imap destination --delete2 : efface sur le compte distant les messages non présent dans la source. --delete --expunge1 : peut être utilisé dans les arguments de la source pour effacer les mails une fois transférés (intéressant dans le cas d'une migration)
Bien évidemment vous n’allez pas lancer cette commande tous les jours, il vous faut la transformer en tache Cron
pour cela nous allons créer un fichier dans le dossier /etc/cron.daily (du coup cette commande ne sera executé qu’une fois par jour), aussi connecter vous en SSH sur votre serveur
ssh root@votre-serveur nano /etc/cron.daily/sauvimap
copiez ces Lignes
#!/bin/bash ####sauv du compte imap toto //usr/bin/imapsync --noauthmd5 --host1 localhost --port1 993 --ssl1 --user1 TOTO \ --password1 TOTO --host2 TOTO.COM --port2 993 --ssl2 --user2 TOTO@TOTO.com \ --password2 TOTO --noauthmd5 --delete2
puis enregistrez avec un ctrl+x
rendez le fichier executable
chmod +x /etc/cron.daily/sauvimap
testez votre fichier pour voir si vous avez des erreurs qui remontent
./etc/cron.daily/sauvimap
vous aurez bien sur besoin d’inclure une ligne par compte imap que vous voulez transférer :)
2. on customise un peu
Comme vous avez pu le voir, les mots de passe sont en clair dans le script, aussi pour ma part cela ne me dérange pas beaucoup car je suis le seul a utiliser mon serveur, mais dans le cas d’administrateurs partagés cela peut poser un problème.
en effet une personne pourrait voir dans la liste des taches la ligne complète avec les arguments dont les mots de passe….fâcheux non
voila comment on peut securiser un peu le tout
/usr/bin/imapsync \ --host1 imap.truc.org --user1 foo --passfile1 /etc/secret1 \ --host2 imap.trac.org --user2 bar --passfile2 /etc/secret2
–passfile1 /etc/secret1 :fichier de MDP de la source
–passfile2 /etc/secret2 :fichier de MDP de la destination
on voit que l’on utilise l’argument « passfile1 », en effet on va créer des fichier contenant lesmots de passe qui seront appelés par imapsync, « secret » sera le mot de passe et ils ne seront que lisible par ROOT
en root par ssh
echo "secret" > /etc/secret1 echo "secret" > /etc/secret2 chmod 600 /etc/secret1 chmod 600 /etc/secret2
3. la liste complete des arguments
--host1 <string> : "from" imap server. Mandatory. --port1 <int> : port to connect on host1. Default is 143. --user1 <string> : user to login on host1. Mandatory. --authuser1 <string> : user to auth with on host1 (admin user). Avoid using --authmech1 SOMETHING with --authuser1. --password1 <string> : password for the user1. Dangerous, use --passfile1 --passfile1 <string> : password file for the user1. Contains the password. --host2 <string> : "destination" imap server. Mandatory. --port2 <int> : port to connect on host2. Default is 143. --user2 <string> : user to login on host2. Mandatory. --authuser2 <string> : user to auth with on host2 (admin user). --password2 <string> : password for the user2. Dangerous, use --passfile2 --passfile2 <string> : password file for the user2. Contains the password. --noauthmd5 : don't use MD5 authentification. --authmech1 <string> : auth mechanism to use with host1: PLAIN, LOGIN, CRAM-MD5 etc. Use UPPERCASE. --authmech2 <string> : auth mechanism to use with host2. See --authmech1 --ssl1 : use an SSL connection on host1. --ssl2 : use an SSL connection on host2. --folder <string> : sync this folder. --folder <string> : and this one, etc. --folderrec <string> : sync this folder recursively. --folderrec <string> : and this one, etc. --include <regex> : sync folders matching this regular expression --include <regex> : or this one, etc. in case both --include --exclude options are use, include is done before. --exclude <regex> : skips folders matching this regular expression Several folders to avoid: --exclude 'fold1|fold2|f3' skips fold1, fold2 and f3. --exclude <regex> : or this one, etc. --prefix1 <string> : remove prefix to all destination folders (usually INBOX. for cyrus imap servers) you can use --prefix1 if your source imap server does not have NAMESPACE capability. --prefix2 <string> : add prefix to all destination folders (usually INBOX. for cyrus imap servers) use --prefix2 if your target imap server does not have NAMESPACE capability. --regextrans2 <regex> : Apply the whole regex to each destination folders. --regextrans2 <regex> : and this one. etc. When you play with the --regextrans2 option, first add also the safe options --dry --justfolders Then, when happy, remove --dry, remove --justfolders --regexmess <regex> : Apply the whole regex to each message before transfer. Example: 's/\000/ /g' # to replace null by space. --regexmess <regex> : and this one. --regexmess <regex> : and this one, etc. --regexflag <regex> : Apply the whole regex to each flags list. Example: 's/"Junk"//g' # to remove "Junk" flag. --regexflag <regex> : and this one, etc. --sep1 <string> : separator in case namespace is not supported. --sep2 <string> : idem. --delete : delete messages on source imap server after a successful transfer. Useful in case you want to migrate from one server to another one. With imap, delete tags messages as deleted, they are not really deleted. See expunge. --delete2 : delete messages on the destination imap server that are not on the source server. --expunge : expunge messages on source account. expunge really deletes messages marked deleted. expunge is made at the beginning on the source server only. newly transferred messages are expunged if option --expunge is given. no expunge is done on destination account but it will change in future releases. --expunge1 : expunge messages on source account. --expunge2 : expunge messages on target account. --uidexpunge2 : uidexpunge messages on the destination imap server that are not on the source server, requires --delete2 --syncinternaldates : sets the internal dates on host2 same as host1. Turned on by default. --idatefromheader : sets the internal dates on host2 same as the "Date:" headers. --buffersize <int> : sets the size of a block of I/O. --maxsize <int> : skip messages larger than <int> bytes --maxage <int> : skip messages older than <int> days. final stats (skipped) don't count older messages see also --minage --minage <int> : skip messages newer than <int> days. final stats (skipped) don't count newer messages You can do (+ are the messages selected): past|----maxage+++++++++++++++>now past|+++++++++++++++minage---->now past|----maxage+++++minage---->now (intersection) past|++++minage-----maxage++++>now (union) --skipheader <regex> : Don't take into account header keyword matching <string> ex: --skipheader 'X.*' --useheader <string> : Use this header to compare messages on both sides. Ex: Message-ID or Subject or Date. --useheader <string> and this one, etc. --skipsize : Don't take message size into account. --allowsizemismatch : allow RFC822.SIZE != fetched msg size consider --skipsize to avoid duplicate messages when running syncs more than one time per mailbox --dry : do nothing, just print what would be done. --subscribed : transfers subscribed folders. --subscribe : subscribe to the folders transferred on the "destination" server that are subscribed on the "source" server. --nofoldersizes : Do not calculate the size of each folder in bytes and message counts. Default is to calculate them. --justfoldersizes : exit after printed the folder sizes. --syncacls : Synchronises acls (Access Control Lists). --nosyncacls : Does not synchronise acls. This is the default. --debug : debug mode. --debugimap : imap debug mode. --version : print software version. --justconnect : just connect to both servers and print useful information. Need only --host1 and --host2 options. --justlogin : just login to both servers with users credentials and exit. --justfolders : just do things about folders (ignore messages). --fast : be faster (just does not sync flags). --reconnectretry1 <int>: reconnect if connection is lost up to <int> times --reconnectretry2 <int>: reconnect if connection is lost up to <int> times --split1 <int> : split the requests in several parts on source server. <int> is the number of messages handled per request. default is like --split1 1000 --split2 <int> : same thing on the "destination" server. --fastio1 : use fastio with the "from" server. --fastio2 : use fastio with the "destination" server. --timeout <int> : imap connect timeout. --help : print this.
bonjour,
je n’arrive pas à utilisé imapsync si je met ma commande directement dans le terminal j’ai cette erreur
failed–compilation aborted at ./imapsync line 439
franchement j’ignore comment l’utiliser
Bizarre…une erreur de compilation….pour ma part j’utilise le binaire fournie par la distribution Linux, du coup aucun problème de compilation…
Sur quelle distribution êtes Vous.
bonjour a tous et meci de me repondre .actuellement je fait une migration avec imapsync, actuelement je bloque au niveau de la connexion bref je ne comprend pas pourquoi la connexion met autant de temps pres d’une demi journee lorsque je lance la commande qui va permettre la migration des mails voici ce qui reste afficher pres d’une demi journee
and the module Mail::IMAPClient version used here is 2.2.9
Command line used:
/usr/bin/imapsync –buffersize 8192000 –nosyncacls –subscribe –syncinternaldates –host1 192.168.1.10 –port1 993 –user1 chimene.ngameni –password1 MASKED –ssl2 –host2 192.168.1.48 port1 143 –user2 admin –password2 MASKED –ssl2 –authmech2 LOGIN –debugimap –authmech1 LOGIN –noauthmd5
Turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
TimeZone:[africa/douala]
Will try to use LOGIN authentication on host1
Will try to use LOGIN authentication on host2
From imap server [192.168.1.10] port [993] user [chimene.ngameni]
To imap server [192.168.1.48] port [993] user [admin]
From connection
cordialement
Bizarre de lancer une connexion ssl sur l’hôte de destination en passant par le port 143 qui traditionnellement est sans ssl.
–host2 192.168.1.48 port1 143 –user2 admin –password2 MASKED –ssl2
comme on peut voir du coup il essaye de se connecter sur le 993 sur la destination…
From imap server [192.168.1.10] port [993] user [chimene.ngameni]
To imap server [192.168.1.48] port [993] user [admin]
est ce que le problème ne viendrait pas de là ?
bonne annee avous et merci de me repondre j’ai corriger et maintenant la synchronisation reste bloquer a la connection pendand des heur et ne progresse plus j’ai surement manquer quelque chose mais je ne sais pas quoi pouvez vous m’aiguiller???
cordialement
$RCSfile: imapsync,v $ $Revision: 1.286 $ $Date: 2009/07/24 15:53:04 $
Here is a [linux] system (Linux zimbra.axxentis.com 2.6.32-41-generic #94-Ubuntu SMP Fri Jul 6 18:00:34 UTC 2012 x86_64)
with perl 5.10.1
Mail::IMAPClient 2.2.9
IO::Socket 1.31
IO::Socket::SSL
Digest::MD5 2.33
Digest::HMAC_MD5 1.01
Term::ReadKey 2.30
Date::Manip
and the module Mail::IMAPClient version used here is 2.2.9
Command line used:
/usr/bin/imapsync –buffersize 8192000 –nosyncacls –subscribe –syncinternaldates –host1 192.168.1.10 –port1 993 –user1 chimene.ngameni –password1 MASKED –ssl2 –host2 192.168.1.48 port2 993 –user2 admin –password2 MASKED –ssl2 –authmech2 LOGIN –debugimap –authmech1 LOGIN –noauthmd5
Turned ON syncinternaldates, will set the internal dates (arrival dates) on host2 same as host1.
TimeZone:[africa/douala]
Will try to use LOGIN authentication on host1
Will try to use LOGIN authentication on host2
From imap server [192.168.1.10] port [993] user [chimene.ngameni]
To imap server [192.168.1.48] port [993] user [admin]
From connection
les mots de passe sont bons ?
Pour info le binaire est disponible sur un repository github en ligne.
Il suffit (si git d’installer) de faire un git clone adresse
Ensuite d’installer les packages suivants :
mail::IMAPClients
Ainsi que ces dépendances :
Mail::IMAPClient 2.2.9
IO::Socket 1.31
IO::Socket::SSL
Digest::MD5 2.33
Digest::HMAC_MD5 1.01
Term::ReadKey 2.30
Date::Manip
Puis passer en root (pour les utilisateurs linux) de faire un make install et ca doit rouler !
Super article dans tous les cas.
Je recherche parcontre l’informations me définissant bien que 100% du trafic de la BAL de l’host1 a bien été transferé sur la BAL de l’host2.
Hormis reparser le retour, si tu as une idée je suis preneur.
et bien il ne m’a pas semblé que cette option soit implémentée, pour ma part je lance plusieurs fois imapsync pour être sur que tous soit transmis.
Dommage que imapsync ne fasse plus parti du projet Debian :(