Exchange Online - migração IMAP falhando com “FolderHierarchyContainsMultipleRootsTransientException”
By: Caio Ribeiro César
Uma das opções para migrar mailboxes para o Exchange Online é a migração IMAP. Estes cenários ocorrem quando o servidor de origem é executado em plataformas de terceiros como gmail, dovecot, entre outros produtos. O IMAP pode até ser habilitado em um servidor On-Premises (Exchange), porém, como existem outros métodos de migração para este source, não é um cenário comum.
Para que uma migração IMAP funcione, o servidor source deve ser acessado pelo Exchange Online via portas 143 ou 993 (ssl).
Considerações migrações IMAP:
- A migração IMAP não é completa. Itens de calendário, contatos, regras e tarefas não são migrados;
- O protocolo IMAP não efetua o provisionamento de usuários. Isto deve ser feito pelo administrador com um arquivo csv;
- Em alguns cenários, o servidor de origem não suporta o adicionar permissões em mailboxes (algo parecido com o Full Mailbox Permission). Isto significa que o arquivo .csv pode precisar armazenar as senhas de cada mailbox;
- Alguns servidores IMAP utilizam modelos diferentes de autenticação. Isto significa que o arquivo csv pode utilizar modelos de template diferentes do padrão.
Migração IMAP em etapas:
- Provisionamento de usuários;
- Criação do CSV com as credenciais de cada mailbox ou utilizando permissão de administrador em cada conta;
- Criação do Endpoint de migração (recomendação utilização da porta 993 com SSL) ;
- Sincronismo Inicial;
- Sincronismo Incremental a cada 24 horas;
- Validamos se as mailboxes e dados foram migrados para o destino (Exchange Online, Get-MailboxFolderStatistics);
- Alteração do MX para o Exchange Online;
- Confirmamos que o mailflow está funcionando (emails sendo entregues para as mailboxes no Exchange Online), selecionamos a opção de completar a migração no batch;
- O “delta” de dados é feito pelo último Sincronismo Incremental e a migração termina.
Considerações de Troubleshooting em IMAP:
Networking – telnet nas portas 143/993 (dentro, fora da rede);
Utilizar o próprio Outlook para conectar na mailbox que está sendo migrada (opção de IMAP);
Problemas com o arquivo csv – validar EmailAddress, UserName, Password e os modelos em cada servidor (com ou sem impersonate do administrador);
PowerShell - Get-Migrationbatch, Get-MigrationUser , Get-MigrationStatus (| fl);
Caso não tenha o Outlook, o teste de conexão e listagem de pastas pode ser efetuado via telnet na 143:
Telnet IMAP.empresa.com.br 143
? LOGIN DOMAIN/UserAlias PASSWORD
? LIST "" "*"
? Select Sent
? LIST "" "*"
*Exemplo de listagem da pasta “Sent”.
Vamos então ao cenário.
Cliente migrando de uma plataforma IMAP (servidor dovecot) para o Exchange Online. No momento da criação do batch, temos o erro abaixo:
“The username or password for this account is incorrect, or IMAP access is disabled. --> The username or password for this account is incorrect, or IMAP access is disabled. --> Imap server reported an error during LoginCommand indicating that authentication failed: 'Authentication failed.'.”
Iniciamos o troubleshooting na questão de autenticação e acesso ao servidor de fora da rede (telnet e o comando abaixo):
Test-MigrationServerAvailability -IMAP -RemoteServer -Port <143 or 993> -Security <None, Ssl, or Tls>
Após esta etapa, acessamos no Outlook uma das mailboxes que estava sendo migrada (com sucesso). Confirmamos e o template de csv estava corretamente configurado para o servidor de origem (dovecot).
Passamos para a segunda etapa de troubleshooting, coletando o Relatório simples da migração. No log, conseguimos listar o erro “FolderHierarchyContainsMultipleRootsTransientException” :
19/02/2018 11:05:51 [FR1PR80MB1554] '' created request.
19/02/2018 11:06:16 [FR1PR80MB1809] The Microsoft Exchange Mailbox Replication service 'FR1PR80MB1809.lamprd80.prod.outlook.com' (15.20.506.23 ServerCaps:7FFFFF, ProxyCaps:01FDC7FD6FFFBF5FFFFFCB07FFFF, MailboxCaps:, legacyCaps:7FFFFF) is examining the request.
19/02/2018 11:06:16 [FR1PR80MB1809] Connected to target mailbox 'c4iocesar.omicrosoft.com\asdasd-a-4e90-a384-3ba03b50f6ea (Primary)', database 'LAMPR80DG114-db001', Mailbox server 'FR1PR80MB1809.lamprd80.prod.outlook.com' Version 15.20 (Build 506.0).
19/02/2018 11:06:16 [FR1PR80MB1809] Sync state for request c4d602d9-58ca-4d75-7765-9db823000cc1 is null.
19/02/2018 11:06:18 [FR1PR80MB1809] Connected to source mailbox 'caioc@c4iocesar.com (IMAP)', database '', Mailbox server 'mail.c4iocesar.com:993 (None)' Version 0.0 (Build 0.0), proxy server 'FR1PR80MB1809.lamprd80.prod.outlook.com' 15.20.506.23 ServerCaps:7FFFFF, ProxyCaps:01FDC7FD6FFFBF5FFFFFCB07FFFF, MailboxCaps:, legacyCaps:01FDC7FD6FFFBF5FFFFFCB07FFFF.
19/02/2018 11:06:18 [FR1PR80MB1809] Request processing started.
19/02/2018 11:06:20 [FR1PR80MB1809] Transient error FolderHierarchyContainsMultipleRootsTransientException has occurred. The system will retry (1/600).
19/02/2018 11:11:26 [FR1PR80MB1809] The Microsoft Exchange Mailbox Replication service 'FR1PR80MB1809.lamprd80.prod.outlook.com' (15.20.506.23 ServerCaps:7FFFFF, ProxyCaps:01FDC7FD6FFFBF5FFFFFCB07FFFF, MailboxCaps:, legacyCaps:7FFFFF) is examining the request.
19/02/2018 11:11:26 [FR1PR80MB1809] Connected to target mailbox 'c4iocesar.omicrosoft.com\asdasd-50f2-4e90-a384-3ba03b50f6ea (Primary)', database 'LAMPR80DG114-db001', Mailbox server 'FR1PR80MB1809.lamprd80.prod.outlook.com' Version 15.20 (Build 506.0).
19/02/2018 11:11:26 [FR1PR80MB1809] Sync state for request c4d602d9-58ca-4d75-7765-9db823000cc1 is null.
19/02/2018 11:11:28 [FR1PR80MB1809] Connected to source mailbox 'caioc@c4iocesar.com (IMAP)', database '', Mailbox server 'mail.c4iocesar.com:993 (None)' Version 0.0 (Build 0.0), proxy server 'FR1PR80MB1809.lamprd80.prod.outlook.com' 15.20.506.23 ServerCaps:7FFFFF, ProxyCaps:01FDC7FD6FFFBF5FFFFFCB07FFFF, MailboxCaps:, legacyCaps:01FDC7FD6FFFBF5FFFFFCB07FFFF.
19/02/2018 11:11:28 [FR1PR80MB1809] Request processing started.
Temos uma suposição de que o servidor IMAP de origem possui uma estrutura muito extensa de pastas “Root”. Esta exceção não trouxe maiores informações de quais possíveis pastas “Roots” adicionais o Exchange Online não estava conseguindo criar na hierarquia desta caixa de correio - seguimos então para a terceira etapa de coleta de dados:
Get-MigrationUserStatistics -Identity caioc@c4iocesar.com -IncludeReport | Export-Clixml log.xml
Tendo o arquivo .xml em mãos, prosseguimos com a filtragem de conteúdo para a análise e exportamos apenas os erros para um arquivo de log:
PS C:\Users\caioc> $stats = Import-CliXml C:\Users\caioc\Downloads\log.xml
PS C:\Users\caioc> $stats.report.Failures > logReportFalha.txt
Tendo então o erro abaixo:
Timestamp : 2/19/2018 11:06:20 AM
FailureType : FolderHierarchyContainsMultipleRootsTransientException
FailureHash : 60ea
FailureCode : -2146233088
MapiLowLevelError : 0
FailureSide :
FailureSideInt : 0
ExceptionTypes : {Exchange, Transient, MRS, MRSTransient}
ExceptionTypesInt : {1, 2, 10, 11}
WorkItem : AnalyzeFolderHierarchy
Message : Mailbox folder hierarchy contains multiple roots: [Folder2: EntryID: [len=54, data=56 3D313B503D494D41503B46503D42333045423941303344303544413533313537324139364131383232423735343134373043374244], ParentID: [len=54,data=563D313B503D494D41503B46503D34344331393641431423545363630354243313036414645304339303936303436433044424635], Type: Generic, WKFType:None], [Painitec: EntryID: [len=54, data=563D313B503D494D41503B46503D3344353535433130453], ParentID: [len=54, data=563D313B503D494D41503B46503D34344331393641433241423545363630354243313036414645304339303936303436433044424635], Type: Generic, WKFType: None].
Confirmamos com um segundo filtro no arquivo .xml:
PS C:\Users\caioc> $stats.report.failures[-1]
Timestamp : 2/19/2018 4:13:40 PM
FailureType : TooManyTransientFailureRetriesPermanentException
FailureHash : 60ea
FailureCode : -2146233088
MapiLowLevelError : 0
FailureSide :
FailureSideInt : 0
ExceptionTypes : {Exchange, MRS, MRSPermanent}
ExceptionTypesInt : {1, 10, 12}
WorkItem : AnalyzeFolderHierarchy
Message : The job encountered too many transient failures (61) and is quitting. The most common
failure is FolderHierarchyContainsMultipleRootsTransientException with the hit count 60.
--> Mailbox folder hierarchy contains multiple roots: [Folder2: EntryID: [len=54, dat
a=3043374244], ParentID: [len=54, data=563D313B503D494D41503B46503D343443313936414
33241423545363630354243313036414645304339303936303436433044424635], Type: Generic,
WKFType: None], [Painitec: EntryID: [len=54, data=563D313B503D494D41503B46503D334435353543
31304533453446333144354638313330333633393339384344333041434433363535], ParentID:[len=54,
data=563D313B503D494D41503B46503D3434433139364143324142354536363035424331303641464339303936303436433044424635], Type: Generic, WKFType: None].
MessageData :
DataContext :
DataContextData :
StackTrace :
InnerException : FolderHierarchyContainsMultipleRootsTransientException: Mailbox folder hierarchy contains multiple roots: [Folder2: EntryID: [len=54,
Generic, WKFType: None].
UnknownElements :
UnknownAttributes :
XmlSchemaType :
Após esta última análise, provavelmente é algo que precisa ser corrigido no lado do servidor IMAP de origem, pois ter diversas “root folders” (pastas raízes) não é algo permitido no Exchange. Conseguimos entender do arquivo de log que a pasta específica “Folder2” estava sendo considerada pelo Exchange Online como uma pasta de sistema.
Removemos a pasta nas configurações de conta IMAP e a migração foi efetuada com sucesso.
Gostaria de agradecer o apoio do nosso amigo Pedro Henrique Lemos de Miranda, da empresa Verdanatech Soluções em T.I para a ajuda no troubleshooting deste cenario!