Cuando necesitas transferir buzones de un servidor a otro por ejemplo para una migración, imapsync puede ser una buena herramienta. Permite la transferencia incremental/recursiva de correos electrónicos de un buzón a otro por IMAP. Por defecto, también transfiere todas las carpetas del usuario y puedes detener la transferencia en cualquier momento para reiniciarla más tarde.
Aunque es importante añadir que no es adecuado para mantener dos cuentas IMAP activas en sincronización cuando el usuario utiliza independientemente en ambos lados. En ese caso, utiliza herramientas dedicadas para ese uso como offlineimap (escrito por John Goerzen) o mbsync (escrito por Michael R. Elkins) para realizar sincronizaciones de dos vías.
Instalación de imapsync
Primero deberás instalar algunas dependencias, para ello puedes ejecutar el siguiente comando:
# apt update && apt install -y libtest-simple-perl libtest-requires-perl libtest-mock-guard-perl libtest-fatal-perl libpar-packer-perl libnet-ssleay-perl libio-compress-perl libdigest-hmac-perl libcrypt-ssleay-perl libssl-dev libauthen-ntlm-perl libclass-load-perl libcgi-pm-perl libcrypt-openssl-rsa-perl libdata-uniqid-perl libencode-imaputf7-perl libfile-copy-recursive-perl libfile-tail-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libhtml-parser-perl libjson-webtoken-perl libmail-imapclient-perl libparse-recdescent-perl libmodule-scandeps-perl libreadonly-perl libregexp-common-perl libsys-meminfo-perl libterm-readkey-perl libtest-mockobject-perl libtest-pod-perl libunicode-string-perl liburi-perl libwww-perl libtest-nowarnings-perl libtest-deep-perl libtest-warn-perl make cpanminus git rcs gcc
Una vez ejecutado dicho comando, se tendrá que instalar la dependencia apt-file:
apt-get install apt-file && apt-file update
Luego, configura algunos de módulos requeridos para el uso de imapsync:
# cpanm Crypt::OpenSSL::RSA Proc::ProcessTable Crypt::OpenSSL::Random --force
# cpanm Mail::IMAPClient JSON::WebToken Test::MockObject Dist::CheckConflicts
# cpanm Unicode::String Data::Uniqid --force
# cpanm Mail::IMAPClient Crypt::OpenSSL::PKCS12 IO::Socket::SSL JSON::WebToken JSON Crypt::OpenSSL::RSA LWP HTML::Entities Encode::Byte
A hora puedes descargar el aplicativo o clonarlo desde repositorio oficial de imapsync en GitHub:
# cd /opt && git clone https://github.com/imapsync/imapsync.git
Y accede al directorio del impsync e instálalo:
# cd imapsync && make install
Después puedes copiarlo en el directorio de binarios:
# cp imapsync /usr/bin/imapsync
Para verificar la instalación, puedes hacer una comprobación del funcionamiento:
# imapsync --testslive
Sincronización de buzones
Para realizar la sincronización de los buzones puedes utilizar la siguiente secuencia modificando el nombre de host o dirección IP de los servidores, también los usuarios y con las respectivas contraseñas (valores negrita e itálica).
Pero antes puedes hacer una comprobación de sincronización con la opción "--dry":
# imapsync --dry --host1 mail.dominio.es --user1 usuario@dominio.es --password1 "contraseña" --host2 mail2.dominio.es --user2 usuario2@dominio.es --password2 "contraseña"
Y para realizar sincronización real, elimina "--dry":
# imapsync --host1 mail.dominio.es --user1 usuario@dominio.es --password1 "contraseña" --host2 mail2.dominio.es --user2 usuario2@dominio.es --password2 "contraseña"
Adicionalmente, puedes utilizar el script que proporciona el desarrollador para sincronizar múltiples buzones masivamente. Es el siguiente:
#!/bin/sh
#
# $Id: sync_loop_unix.sh,v 1.11 2021/10/20 21:21:47 gilles Exp gilles $
# Example for imapsync massive migration on Unix systems.
# See also http://imapsync.lamiral.info/FAQ.d/FAQ.Massive.txt
#
# Data is supposed to be in file.txt in the following format:
# host001_1;user001_1;password001_1;host001_2;user001_2;password001_2;;
# ...
# The separator is the character semi-colon ";" it can be changed to any character
# by changing IFS=';' in the while loop below.
#
# Each line contains 7 columns, columns are the 6 parameter values for
# --host1 --user1 --password1 --host2 --user2 --password2
# plus an extra column for extra parameters and a trailing extra column
# to avoid CR LF part going in the 7th parameter extra.
# Don't forget the last semicolon.
#
# You can add extra options after the variable "$@"
# Use character backslash \ at the end of each supplementary line, except for the last one.
# You can also pass extra options via the parameters of this script since
# they will be in "$@". Shell knowledge is your friend.
# The credentials filename "file.txt" used for the loop can be renamed
# by changing "file.txt" below.
# The file file_failures.txt will contain the lines from file.txt that ended
# up in error, for whatever reason. It's there to notice and replay easily
# the failed imapsync runs. I let you junggle with it
echo Looping on account credentials found in file.txt
echo
line_counter=0
# Empty the error listing
> file_failures.txt
{ while IFS=';' read h1 u1 p1 h2 u2 p2 extra fake
do
line_counter=`expr 1 + $line_counter`
{ echo "$h1" | tr -d '\r' | egrep '^#|^ *$' ; } > /dev/null && continue # this skip commented lines in file.txt
echo "==== Starting imapsync with host1 $h1 user1 $u1 host2 $h2 user2 $u2 $extra $@ ===="
if imapsync --host1 "$h1" --user1 "$u1" --password1 "$p1" \
--host2 "$h2" --user2 "$u2" --password2 "$p2" $extra "$@"
then
echo "success sync for line $line_counter "
else
echo "$h1;$u1;$p1;$h2;$u2;$p2;$extra;" | tee -a file_failures.txt
fi
echo "==== Ended imapsync with host1 $h1 user1 $u1 host2 $h2 user2 $u2 $extra $@ ===="
echo
done
} < file.txt
Esperamos que este artículo te haya sido de ayuda y, recuerda, si tienes consultas sobre esta u otra cuestión relacionada con tus servidores en Clouding, no dudes en contactar a soporte@clouding.io. ¡Estamos a tu lado para lo que necesites!