Transferir cuentas de correo entre hostings

Transferir cuentas de correo entre hostings

Hay ocasiones en las que debemos transferir las cuentas de correo de un cliente desde un hosting hacia otro de destino. Si migramos a un buen hosting que incluya gratuitamente el servicio, como es el caso de LucusHost, es coser y cantar, ellos se ocupan de todo y os aseguro que hacen un magnífico trabajo, ya que lo he probado en varias ocasiones.

Pero a veces las migraciones son entre otros servidores, tenemos casos especiales, etc. y debemos afrontar nosotros la migración.

Hace años tengo realizado estas transferencias con un cliente de correo, por ejemplo Thunderbird, en el que configuraba las cuentas de ambos servidores y arrastraba los correos entre una y otra cuenta.

También he utilizado algún programa gráfico que me permitía realizar estas transferencias de manera similar al método de Thunderbird. Pero está claro que este es un método muy artesanal y con desventajas (descargar todo el correo a nuestro ordenador antes de subirlo al nuevo servidor, problemas de lentitud en entornos gráficos, etc.).

Transferir mediante servicios web

Un método viable es la utilización de un servicio web en donde configuramos ambas cuentas y la web se ocupa de pasar desde un servidor hacia el servidor destino.

Para esta opción tenemos algunos reconocidos servicios como por ejemplo el de OVH: https://omm.ovh.net/Migration/Create o el de MDD Hosting: https://imapsync.net/

Pero si vais a utilizar un servicio web yo os recomendaría el de Gilles LAMIRAL https://imapsync.lamiral.info/X/ que en breve os contaré por qué y que, además, el sistema de MDD Hosting también está basado en el sistema de LAMIRAL.

imapsync online

De todas formas pensad que estáis enviando a un servidor de terceros los correos de vuestros clientes con todo lo que esto implica.

Transferir correos entre hostings desde vuestro ordenador

Es evidente que la mejor opción es no depender de terceros. Lo ideal sería realizar la transferencia desde el servidor origen o desde el destino, pero en la gran mayoría de los caos esto no será posible, ya que no podremos instalar nada en ninguno de los dos servicios.

Debido a esto, utilizaremos un tercero, nuestro ordenador, que se encargará de obtener cada correo del origen y enviarlo al destino.

Para eso utilizaremos el sistema que está detrás de dos de los servicios online que hemos mostrado antes: imapsync de Gilles LAMIRAL creado bajo licencia NO LIMIT PUBLIC LICENSE.

Es un software realizado en Perl muy completo y con cantidad de opciones, no dejéis de consultar la documentación.

En mi caso voy a instalarlo en WSL2 en Windows 11, es decir, en un Ubuntu 22.04.4 LTS, por lo que el proceso es igual en este SO y muy similar en otros Linux o en OSX, simplemente comprobad las opciones de instalación en su documentación.

En WSL2 ejecuto en consola los siguientes comandos para instalar las dependencias:

sudo apt-get install  \
libauthen-ntlm-perl \
libclass-load-perl \
libcrypt-openssl-rsa-perl \
libcrypt-ssleay-perl \
libdata-uniqid-perl \
libdigest-hmac-perl \
libdist-checkconflicts-perl \
libencode-imaputf7-perl \
libfile-copy-recursive-perl \
libfile-tail-perl \
libio-compress-perl \
libio-socket-inet6-perl \
libio-socket-ssl-perl \
libio-tee-perl \
libjson-webtoken-perl \
libmail-imapclient-perl \
libmodule-scandeps-perl \
libnet-dbus-perl \
libnet-ssleay-perl \
libpar-packer-perl \
libproc-processtable-perl \
libreadonly-perl \
libregexp-common-perl \
libsys-meminfo-perl \
libterm-readkey-perl \
libtest-fatal-perl \
libtest-mock-guard-perl \
libtest-mockobject-perl \
libtest-pod-perl \
libtest-requires-perl \
libtest-simple-perl \
libunicode-string-perl \
liburi-perl \
libtest-nowarnings-perl \
libtest-deep-perl \
libtest-warn-perl \
make \
time \
cpanminus

Al finalizar la instalación de los módulos, actualizo el módulo de Perl Mail::IMAPClient:

sudo cpanm Mail::IMAPClient

A continuación ejecuto cada uno de los siguientes comandos y los configuro en caso de ser necesario (las opciones por defecto son suficientes):

cpan Encode::IMAPUTF7

cpan File::Copy::Recursive

cpan IO::Tee

cpan Mail::IMAPClient

cpan Term::ReadKey

cpan Unicode::String

cpan Readonly

cpan Sys::MemInfo

cpan Regexp::Common

cpan File::Tail

cpan Test::MockObject

Y ahora descargo imapsync, le doy permisos de ejecución, lo copio a /usr/bin para que se pueda ejecutar desde cualquier ruta y borro el archivo descargado.

sudo wget -N https://imapsync.lamiral.info/imapsync

sudo chmod +x imapsync

sudo cp imapsync /usr/bin/

sudo rm imapsync

Y para finalizar realizo los dos siguientes test para comprobar que funcionará correctamente:

imapsync --tests

imapsync --testslive

Antes de transferir los correos

Previo a la transferencia de correos entre ambos servidores/hostings, tenemos que asegurarnos que en el servidor destino existen las cuentas que vamos a copiar desde el origen.

Vamos al servidor destino y creamos cada una de las cuentas, lo mejor es crearlas con la misma contraseña que tenían en origen, ya se ocupará después el cliente de cambiar las contraseñas de sus cuentas recién migradas.

Si queremos saber el servidor origen al que conectarnos, podemos mirarlo en la configuración del hosting o bien consultando el registro MX desde la consola con el comando dig, host o nslookup, la opción más sencilla es utilizar dig con el modificador +short para mostrar solo lo que nos interesa:

dig MX tabernawp.com

dig MX +short tabernawp.com

host -t mx tabernawp.com

nslookup -type=mx tabernawp.com

O consultarlo directamente desde algún servicio online como https://mxtoolbox.com/MXLookup.aspx

La transferencia del correo

Y finalizado el trabajo inicial, que solo debemos realizar una vez, ya podemos transferir los correos pasándole 6 parámetros, tres para el servidor origen y tres para el servidor destino.

Los tres parámetros de cada servidor son el host, usuario y clave1:

imapsync --host1 mx.correo.origen --user1 [email protected] --password1  'clave.usuario.origen' --host2 mx.correo.destino --user2 [email protected] --password2 'clave.usuario.origen'

Si estamos copiando datos de buzones entre dos servidores, lo único que cambiará será el host, aunque podemos migrar entre diferentes usuarios o con diferentes claves.

Transfiriendo varios usuarios en lote

Pero claro, si queremos transferir varios usuarios simultáneamente y no tener que ejecutar el mismo comando de uno en uno, está claro que algo podemos automatizar, ¿no?

Pues Lamiral ya nos lo da hecho. Nos descargamos el archivo sync_loop_unix.sh o nuestra versión modificada2, creamos un archivo de texto con nuestras cuentas siguiendo el formato indicado en su ejemplo (o la versión modificada):

# Each line contains at least 6 columns
# The separator is the character semi-colon ";"
# The columns are the values for the parameters
# --host1 --user1 --password1 --host2 --user2 --password2
#
# A extra column can be used to pass some extra parameters but the script reading
# this file have to be able to get them.
#
# Don't forget the last semicolon.
# Lines starting with a # are usually comments and ignored
# Blank lines are ignored as well

# Now the data example
mx.correo.origen;[email protected];clave.usuario.origen1;mx.correo.destino;[email protected];clave.usuario.origen1;;
mx.correo.origen;[email protected];clave.usuario.origen2;mx.correo.destino;[email protected];clave.usuario.origen2;;
mx.correo.origen;[email protected];clave.usuario.origen3;mx.correo.destino;[email protected];clave.usuario.origen3;;

Y ya podemos sincronizar nuestras cuentas de correo entre dos servidores, copiarlas para transferir, etc.

ejecución imapsync

Consideraciones finales

Si ejecutamos imapsync --help veremos que este comando tiene cantidad de opciones como copiar solo a partir de una fecha, ignorar carpetas, sincronizar etiquetas de Gmail, etc., pero un par de parámetros útiles son:

  • --dry que no ejecutará el comando, solo nos mostrará lo que haría.
  • --justlogin solo se conecta a ambos servidores y después sale, para comprobar si las credenciales son correctas.
  • --justfoldersizes nos muestra los tamaños de las carpetas y sale.

Una vez sincronizados dos buzones, si lo volvemos a ejecutar, únicamente copia los correos nuevos del servidor origen al destino. La estrategia correcta de copia sería realizar la sincronización inicial, que puede tardar minutos o en cuentas muy grandes hasta varias horas y en el momento del cambio definitivo, resincronizar de nuevo, lo que tardará solo unos minutos, hacer cambios de DNS e incluso volver a resincronizar si nos conectamos al servidor origen mediante su IP o un nombre que no influya en el cambio de DNS (por ejemplo mx.hosting-pruebas.com).

Y como siempre, si no estáis acostumbrados a la consola, los protocolos de email, MX, IMAP, etc., dejadle este trabajo a vuestro hosting o a un profesional que os realice adecuadamente este trabajo.

  1. Encerramos la clave entre comillas sencillas, ya que a pesar de que en la documentación original está con comillas dobles, a mí me ha fallado tanto con dobles como sin comillas. ↩︎
  2. La versión modificada que he creado acepta que le pasemos un parámetro al script con el archivo txt de los mails y si no le pasamos el parámetro, nos pregunta por dicho archivo, además de comprobar que exista el archivo. ↩︎

Deja un comentario