# Migrazione posta da IMAP a Microsoft 365

In ufficio abbiamo un pot-pourri di licenze di Office comprate negli anni che rasentano l'obsolescenza informatica e si è optato per un passaggio a [Microsoft 365](https://www.microsoft.com/it-it/microsoft-365/microsoft-office) completo, posta compresa.

Ora il problema immediatamente presentatosi è la migrazione degli utenti dal vecchio provider che utilizza il protocollo [IMAP](https://it.wikipedia.org/wiki/Internet_Message_Access_Protocol) a Microsoft, e per risolvere ho pensato a [Imapsync](https://imapsync.lamiral.info/).

Per prima cosa ho inserito tutti gli utenti dentro il tenant di Microsoft e abilitato l'imap in tutti perchè sarà proprio con IMAP che migreremo le caselle.

Imapsync è un tool di migrazione che copia o sincronizza cartelle da un account ad un altro tramite il protocollo imap è molto usato su sitemi linux o similari ma funziona anche su Windows, il link per scaricare l'eseguibile è [https://imapsync.lamiral.info/dist/](https://imapsync.lamiral.info/dist/); se entrambe i nostri provider utilizzassero solo imap una volta autenticati tramite il [tool online](https://imapsync.lamiral.info/X/) potremmo migrare efficacemente tutti gli account uno alla volta ma il nostro problema si chiama [OAuth 2.0](https://en.wikipedia.org/wiki/OAuth).
Già perchè anche Microsoft 365 utilizza questo nuovo standard aperto per l'autenticazione ai propri sistemi, in pratica una volta inseriti user e password si viene reindirizzati tramite browser ad una pagina che si occupa di inviare un token se si è autorizzati, ed anche qui imapsync ed i suoi [eseguibili](https://imapsync.lamiral.info/dist/imapsync_2.290.zip) ci vengono in soccorso.

Scarichiamo [l'eseguibile](https://imapsync.lamiral.info/dist/imapsync_2.290.zip) in una cartella a nostro piacere ed esaminandola i file che ci interessa copiare sono:

- imapsync.exe, oauth2_imap, oauth2_imap.exe, localhost.crt, localhost.key, localhost_CA_cert

ora all'interno di questa cartella creiamo un file batch "from_Zimbra_to_MS365.bat"

```
@echo on

::#################################################
:: Variabili configurabili
::#################################################
SET EMAIL_USER1=user@dominio.net
SET PASSWORD_USER1=password01
SET EMAIL_USER2=user@dominio.net
SET PASSWORD_USER2=password02

::#################################################
:: Script per copiare le email da un host con IMAPS verso Microsoft Office 365 con imapsync.
::#################################################
@SETLOCAL
@PUSHD %~dp0
@ECHO 
@ECHO Getting OAUTH2 tokens 

:: Crea se non esiste la cartella "tokens":
@IF NOT EXIST tokens MKDIR tokens

:: Lo script lancia il file "oauth2_imap.exe" con l'account che vogliamo e ne salva le credenziali nella cartella "tokens":
CALL .\oauth2_imap.exe --provider office365 %EMAIL_USER2%

imapsync.exe  --host1 smtp.provider.old.com ^
                      --port1 993 ^
                      --ssl1 ^
                      --user1 %EMAIL_USER1% ^
                      --password1 "%PASSWORD_USER1%" ^
                      --office2 ^
                      --oauthaccesstoken2 .\tokens\oauth2_tokens_%EMAIL_USER2%.txt ^
                      --user2 %EMAIL_USER2% ^
                      --password2 "%PASSWORD_USER2%" ^
                      --addheader ^
					  --nofoldersizes ^
					  --nofoldersizesatend ^
                      --syncinternaldates ^
                      --automap

@POPD
```

Nelle prime righe del batch gli passiamo email e password dei due account che vogliamo sincronizzare, successivamente viene richiamato l'eseguibile "oauth2_imap.exe" che apre il browser e ci chiede i permessi per l'autenticazione salvandoli dentro la cartella "tokens".

Noteremo all'interno di questa cartella tokens un nuovo file creato dal nome "oauth2_tokens_user@dominio.net.txt un file di testo che contiene la prima parte il token vero e proprio la seconda parte il suo refresh.

Da notare dobbiamo anche editare la riga di imapsync per indicargli l'host corretto del vecchio provider "smtp.provider.old.com".

{{< figure src="/images/imapsync_oauth2.png" title="Fig.1" >}}
 
All'interno possiamo vedere una nuova cartella "LOG_imapsync" che contiene il log della connessione per eventuali errori; da notare che imapsync ha una miriade di switch per cui è possibile configurare come vogliamo la copia degli account, per esempio aggiungendo il codice sotto possiamo sincronizzare solamente le email a partire dal 1 gennaio 2023 ad oggi:
```
--search "SENTSINCE 1-Jan-2023" ^
```

Ho notato delle limitazioni di Exchange nelle email in ingresso che sono limitate a 45 mb, per altre info sulla copia da e per [Office 365](https://imapsync.lamiral.info/FAQ.d/FAQ.Office365.txt) rimando anche alle info [OAuth2](https://imapsync.lamiral.info/oauth2/oauth2_imap/README_oauth2.txt) su [imapsync](https://imapsync.lamiral.info/FAQ.d/) fatte molto bene.

Ok ora armatevi di tanta pazienza e create lo script per ognuno dei vostri utenti, tanto per trasferire tutto ci vorrà tempo !!
