Está en la página 1de 4

blog.phenobarbital.

info
http://blog.phenobarbital.info/2015/02/migrando-correos-imap-usando-dovecot-imapsync-o-imapcopy/

Migrando correos IMAP usando dovecot, imapsync o


imapcopy
phenobarbital

Esta semana me toc migrar un servidor de correo IMAP viejo hacia un nuevo servidor, decid documentar 3 de
las herramientas que uso para migrar y sincronizar entre buzones para aquellos que tengan dudas, dichas
herramientas son imapsync, doveadm e imapcopy.
La primera es revisaremos es doveadm.

Doveadm: migrando diferentes formatos de buzones


Doveadm es un comando administrativo de Dovecot, si usan dovecot como servidor IMAP (como yo) sabrn
que dovecot soporta diferentes espacios de buzones IMAP e incluso diferentes dialectos de buzn (mbox, dbox,
maildir, maildir+) y doveadm es una herramienta interesante para migrar desde diferentes formatos fsicos de
buzones.

Cundo usar doveadm?


Cuando tenemos un respaldo fsico de los buzones, ms no tenemos ningn servidor disponible, doveadm leer
directamente el archivo/directorio fsico del buzn y lo inyectar en el servidor local/remoto que le indiquemos.
Veamos un ejemplo:
He creado un directorio (/srv/viejocorreo/) donde he copiado unos viejos mbox (formato: mailbox) de unos
usuarios, tenan 2 mbox, uno para el INBOX y otro para sus carpetas personales, entonces el comando es
bastante sencillo, simplemente ejecut en el servidor dovecot:
doveadm -v sync -u soporte@phenobarbital.info -f
mbox:/srv/viejocorreo/home/soporte/mail:INBOX=/srv/viejocorreo/inbox/soporte
El comando es bastante simple, pide una sincronizacin (sync) de la cuenta (-u) soporte@phenobarbital.info con
el contenido de los buzones que estn declarados luego de -f, en este caso, un mbox: y el mail:INBOX, y listo!.
Qu hace dovecot?, simplemente dovecot usar el proceso dovecot-deliver para inyectar todo correo que
consiga en los mailboxes al usuario indicado.
Sencillo no?
Y qu pasa si no tengo acceso fsico a los buzones?, he all donde entran imapsync e imapcopy.

IMAPSYNC
Prefiero imapsync, es una herramienta muy madura, muy estable, est escrita en perl, por desgracia, ya no est
empaquetada para Debian y hay que instalarla desde un fuente.
Pero tranquilos, su instalacin es sencilla:
Instalamos las dependencias:
apt-get install libdate-manip-perl libterm-readkey-perl libterm-readkey-perl
libdigest-hmac-perl libdigest-hmac-perl libdate-manip-perl libmail-imapclient-perl

1/4

makepasswd rcs perl-doc git libunicode-map-perl libunicode-string-perl


Luego, clonamos el fuente e imapsync:
git clone git://github.com/imapsync/imapsync.git
cd imapsync
Ejecutamos la instalacin de las dependencias de imapsync (va cpan):
sh examples/install_modules_linux.sh
(NOTA: si desean saber si CPAN est activo en su distribucin, ejecuten:
perl -MCPAN -e shell )
Compilamos:
make install
El proceso de instalacin se ver as:
make install
perl -c imapsync || { echo; echo "Read the INSTALL file to solve Perl module
dependencies!"; exit 1; }
imapsync syntax OK
pod2man imapsync > imapsync.1
mkdir -p /usr/bin
install imapsync /usr/bin/imapsync
chmod 755 /usr/bin/imapsync
mkdir -p /usr/share/man/man1
install imapsync.1 /usr/share/man/man1/imapsync.1
chmod 644 /usr/share/man/man1/imapsync.1
Y ya tenemos instalado imapsync.

Usando imapsync
Para usar imapsync ejecutamos el siguiente comando:
imapsync --authmech1 LOGIN --host1 <source_hostname> --user1 <source_username>-password1 <source_password> --authmech2 LOGIN --host2 <target_hostname> --user2
<target_username> --password2 <target_password>
Donde:
authmech: significa el mecanismo de autenticacin IMAP (LOGIN, PLAIN, NTLM, etc)
host1: servidor de origen de los correos
user1: usuario origen de los correos
password1: clave del usuario1
Y se repite lo mismo para el destino (host2, user2, password2, authmech2, etc).
En mi caso especfico, us imapsync para migrar entre servidores IMAPS (imap seguro), entonces el comando
qued as:

2/4

imapsync --authmech1 LOGIN --host1 <source_hostname> --ssl1 \


--port1 993 --authmech2 LOGIN --host2 <target_hostname> -user1 <username> -password1 <password> --user2 <username> --password2 <password> --ssl2 \
--port2 993 --noauthmd5 --nosyncacls --syncinternaldates --allowsizemismatch -subscribe_all
Adems, como bash todo lo puede, me hice un breve script que carga la lista de direcciones y claves desde un
archivo de texto, permitiendo automatizar la migracin de muchos buzones:
#!/bin/bash
# sincronizar correo entre servidores desde una lista
# Authors:
# Jesus Lara <jesuslara@phenobarbital.info>
# version: 2.0
# Copyright (C) 2010 Jesus Lara
oldserver=10.0.0.10
newserver=10.0.0.11
while read p; do
user=( $p )
uid=${p%@*}
pass=${user[1]}
echo "Migrando correo de usuario ${uid}"
/usr/bin/imapsync --authmech1 LOGIN --host1 $oldserver --authmech2 LOGIN --host2
$newserver --user1 $uid --password1 $pass --user2 $uid --password2 $pass -syncinternaldates --allowsizemismatch --subscribe_all
if [ $? -eq 0 ]; then
echo "migracion de ${uid} completa"
else
echo "ERROR en buzon ${uid}"
echo "${uid} >>error_buzon.log"
fi
done<migrar_correo.txt
echo "Migracion completa."
exit 0
Nota: Pueden descargar el script desde este gist: https://gist.github.com/phenobarbital/2380a0e9e1f1d07e1c42

Usando IMAPCOPY
Una herramienta ya empaquetada en Debian se llama imapcopy, sirve a los mismos propsitos que imapsync,
no es tan completa (por ejemplo, no soporta SSL) y requiere un archivo de configuracin para ejecutarse.
Para tener imapcopy simplemente instalamos:
apt-get install imapcopy
Y creamos su archivo de configuracin:
vim /etc/ImapCopy.cfg
Archivo: /etc/ImapCopy.cfg
SourceServer 10.0.0.10
SourcePort 143

3/4

DestServer 10.0.0.11
DestPort 143
# SourceUser SourcePassword DestinationUser DestinationPassword
Copy "jesuslara@phenobarbital.info" "superpassword" "jesuslara@phenobarbital.info"
"superpassword"
Entonces, indicamos servidor origen, servidor destino y en una linea, el buzn origen y destino que vamos a
sincronizar.
Luego de creado el archivo de configuracin, simplemente ejecutamos:
imapcopy
Y comienza el proceso de migracin.
Podemos, agregar entre las opciones a skipfolder INBOX.Trash para evitar que copie la papelera de todos los
usuarios a copiar o DebugDst y DebugSrc si deseamos ver la salida del proceso de migracin.
Nota: pueden usar stunnel para crear un tunel SSL entre los servidores IMAPs y as poder usar imapcopy.

4/4