Imapsync su Ubuntu in WSL

Vi è capitato di dover spostare in blocco tutti i messaggi di posta elettronica da un provider ad un altro ?

Spesso questa operazione la si esegue per un passaggio da una email ad un’altra o anche per un semplice archivio, ed ecco che il tutto nasce dalla necessità di eseguire copie in blocco da un account imap ad un altro.

E' vero che in rete si trovano tool online che ti permettono di farlo agevolmente, lo stesso Imapsync lo propone ma poterlo fare in completa autonomia e magari con precise caratteristiche puo' fare la differenza.

Con questa soluzione lo potete fare da Windows 10 usando Windows Subsystem Linux e una qualsiasi distribuzione Linux, in questo caso useremo Ubuntu 20 e Imapsync.

Da come si evince dal sito Imapsync è un IMAP transfer tool ovvero utilizza il protocollo IMAP per trasferire tutto il contenuto da un account ad un altro, è un codice piuttosto maturo dal 1994 e molto potente e ci si puo' veramente sbizzarrire con tutte le possibilità offerte e invito alla lettura della corposa documentazione.

Per prima cosa dobbiamo abilitare Windows Subsystem Linux in Windows 10. Avviamo una finestra di comando con i privilegi di amministratore: clicchiamo tasto Windows e scriviamo “cmd” e “esegui come amministratore”

1
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Ora prepariamo una cartella in cui scaricheremo il pacchetto di Ubuntu 20

1
2
3
4
cd c:\ & mkdir tmp & cd c:\tmp
powershell Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile Ubuntu.appx -UseBasicParsing
powershell Add-AppxPackage .\Ubuntu.appx
wsl --set-version Ubuntu-20.04 2

Dopo un riavvio di Windows dovreste ritrovarvi nel menù Start una nuova icona “Ubuntu 20.04 LTS”, eseguitela e quando ce lo chiederà dobbiamo inserire il nuovo utente per Ubuntu e la sua password . . .

Ora non ci resta che aggiornare Ubuntu, installare tutti i pacchetti necessari a soddisfare le dipendenze e quindo lo stesso Imapsync, e questo lo faremo dalla shell linux:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
sudo apt update && sudo apt -y upgrade
sudo apt install -y git rcs make makepasswd cpanminus

sudo apt install -y gcc libssl-dev libauthen-ntlm-perl libclass-load-perl libcrypt-ssleay-perl liburi-perl libdata-uniqid-perl libdigest-hmac-perl libdist-checkconflicts-perl libfile-copy-recursive-perl libio-compress-perl libio-socket-inet6-perl libio-socket-ssl-perl libio-tee-perl libmail-imapclient-perl libmodule-scandeps-perl libnet-ssleay-perl libpar-packer-perl libreadonly-perl libsys-meminfo-perl libterm-readkey-perl libtest-fatal-perl libtest-mock-guard-perl libtest-pod-perl libtest-requires-perl libtest-simple-perl libunicode-string-perl libcgi-pm-perl libencode-imaputf7-perl libfile-tail-perl liblwp-protocol-https-perl libregexp-common-perl libtest-deep-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl nano mc

sudo cpanm Crypt::OpenSSL::RSA Crypt::OpenSSL::Random --force
sudo cpanm Mail::IMAPClient JSON::WebToken Test::MockObject 
sudo cpanm Unicode::String Data::Uniqid
sudo cpanm Crypt::OpenSSL::RSA JSON::WebToken::Crypt::RSA

cd /home/gaby
git clone https://github.com/imapsync/imapsync.git

sudo apt install -y apt-file 
sudo apt-file update

cd imapsync
mkdir -p dist
sudo make install

A questo punto se tutto è andato per il verso giusto dovremmo avere imapsync installato in /usr/bin e per verificarlo:

1
2
which imapsync
imapsync --help

Ora non ci resta che configurare gli script in bash per impostare il trasferimento, a questo scopo prepareremo due file uno contenente gli utenti dei due account con relative password separati da virgola mentre l’altro sarà lo script vero e proprio dove inseriremo i server degli account, ecco un esempio:

1
2
3
4
5
cd ~
mkdir backup-posta && cd backup-posta
cat << 'EOF' >> users.txt
utente_origine@gmail.com;password_origine;utente_destino@gmx.com;password_destino
EOF

ora creiamo lo script di configurazione:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
cd ~/backup-posta

cat << 'EOF' >> migration.sh
#!/bin/bash

#Configure servers
SERVER1=imap.gmail.com
SERVER2=imap.gmx.com

#Set the path to your imapsync binary
imapsync=/usr/bin/imapsync

#Users file
if [ -z "$1" ]
then
echo "Nessun file di testo fornito."
exit
fi

if [ ! -f "$1" ]
then
echo "Il file di testo \"$1\" non esiste"
exit
fi

{ while IFS=';' read  u1 p1 u2 p2; do

$imapsync --usecache --tmpdir /var/tmp \
--host1 ${SERVER1} --port1 993 --user1 "$u1" --password1 "$p1" --ssl1 \
--host2 ${SERVER2} --port2 993 --user2 "$u2" --password2 "$p2" --ssl2 \
--nosyncacls \
--syncinternaldates \
--skipsize \
--nofoldersizes \
--useuid \
--no-modulesversion

done ; } < $1
EOF

chmod +x ~/backup-posta/migration.sh

A questo punto non ci resta che testare il tutto passando allo script il file users.txt in questo modo:

1
2
cd ~/backup-posta
bash ~/backup-posta/migration.sh ~/backup-posta/users.txt

Se tutto è andato a buon fine potremmo vedere scorrere il log di trasferimento da un server all’altro. Attenzione se uno dei due server è Gmail è necessario abilitare nell’account l’utilizzo di app meno sicure.