obsidian-vault/ligbox-ops-platform/specs/013-email-server-migration/research.md
2026-06-19 17:26:42 +00:00

8 KiB

Research: Ferramentas de Migração de E-mail (013)

Data: 2026-06-10
Autor: Cursor Agent (para Roger)
Objetivo: Seleccionar stack open-source com precisão, suporte a múltiplos formatos e operação antes do cutover DNS.


Critérios de avaliação

Critério Peso Descrição
Integridade P0 Sem perda de mensagens; sem duplicatas; preservar pastas
Retomável P0 Sync incremental; reinício após falha
Formatos P0 IMAP, PST, mbox, EML, TGZ (Zimbra/Carbonio)
Verificação P0 Contagens, logs, comparadores
Produção P1 Usado em migrações reais; manutenção activa
OAuth/M365 P1 Office 365 / Google modernos
Licença P1 Open source ou uso comercial permitido

Matriz de ferramentas (decisão)

1. IMAP → IMAP (servidor a servidor) — PRIMÁRIO

Ferramenta Repo / URL Stars Veredito
imapsync https://github.com/imapsync/imapsync ~4k Escolhido — motor principal
doveadm backup/sync https://doc.dovecot.org/latest/core/admin/migration.html Secundário se origem/destino Dovecot
offlineimap / mbsync vários Menos adequado a migração one-way em massa

Porquê imapsync:

  • Padrão de facto para migração IMAP entre fornecedores (cPanel, Zimbra, O365, Gmail → Carbonio).
  • Sync incremental e recursivo — pode correr dias antes do DNS.
  • Evita duplicatas; retomável.
  • Suporte OAuth2 via oauth2_imap (site oficial imapsync.lamiral.info).
  • Documentação extensa (FAQ, casos Exchange/Gmail).

Quando doveadm:

  • Ambos os lados Dovecot/Carbonio com acesso admin.
  • Verificação UIDL mais rigorosa (documentação Dovecot recomenda diff manual).

2. PST / OST (Microsoft Outlook) — PIPELINE OFICIAL

Etapa Ferramenta Repo / pacote Veredito
PST → mbox readpst (libpst) pst-utils / https://www.five-ten-sg.com/libpst/ Extracção battle-tested
mbox → IMAP imap-upload https://github.com/rgladwell/imap-upload (~148) Upload para Carbonio via IMAP
Wrapper moderno pst2mbox https://github.com/beaufour/pst2mbox Progress bar, resumível, arquitectura modular

Pipeline Ligbox (PST):

.pst → readpst -o mbox -r arquivo.pst
     → imap-upload.py --ssl --host mail.destino --user conta@dominio ...
     → validação contagem + amostra

Riscos PST (mitigação na spec):

  • PST corrompido → readpst com log; quarentena em ERR_MBOX (flag --error do imap-upload).
  • RTF vs HTML → não usar -b em PST antigos (pré-2010).
  • Pastas Outlook → mapear estrutura readpst para IMAP com prefixo INBOX..
  • Não depender só de drag-and-drop Outlook (manual, não auditável).

pst2mbox recomendado como wrapper futuro (Fase B) — encapsula readpst + upload com progresso.


3. Zimbra / Carbonio (mesma família) — NATIVO

Método Comando Veredito
Export TGZ zmmailbox -z -m user getRestURL '/?fmt=tgz' Bulk, preserva metadados
Import TGZ zmmailbox -z -m user postRestURL "/?fmt=tgz&resolve=skip" ficheiro.tgz Destino Carbonio
IMAP fallback imapsync Zimbra antigo → Carbonio novo

Ordem Zextras Community (referência):

  1. Criar contas no destino
  2. Migrar dados (TGZ ou imapsync)
  3. Só depois alterar MX/DNS
  4. Sync final pós-DNS

Fonte: Zimbra → Carbonio CE migration


4. mbox / EML avulso

Ferramenta Uso
imap-upload mbox → IMAP Carbonio
zmmailbox addMessage EML individual no Carbonio (admin)
ImportExportTools NG (Thunderbird) Fallback manual auditado

5. Office 365 / Gmail

Ferramenta Notas
imapsync + oauth2_imap O365 exige OAuth; não usar password básica
imap-upload --office365 / --gmail Upload mbox para destinos cloud

6. Ferramentas comerciais (referência — fora do MVP)

Ferramenta Motivo exclusão MVP
BitRecover / Advik / TrustVare Fechadas; sem API; sem integração Desk
MailStore Trial; possível Fase C para auditoria legal

Stack aprovada para Spec 013

┌─────────────────────────────────────────────────────────────────┐
│                  Ligbox Ops — Migration Orchestrator            │
│                     (VM122 API + Worker)                        │
└────────────────────────────┬────────────────────────────────────┘
                             │
     ┌───────────────────────┼───────────────────────┐
     │                       │                       │
     ▼                       ▼                       ▼
┌─────────┐          ┌─────────────┐         ┌──────────────┐
│ imapsync│          │ readpst     │         │ zmmailbox    │
│ (IMAP)  │          │ + imap-upload│        │ tgz export/  │
│         │          │ (PST/mbox)  │         │ import       │
└────┬────┘          └──────┬──────┘         └──────┬───────┘
     │                      │                       │
     └──────────────────────┼───────────────────────┘
                            ▼
                   ┌─────────────────┐
                   │ Carbonio VM112  │
                   │ (destino IMAP)  │
                   └─────────────────┘
                            │
                   ┌────────▼────────┐
                   │  GATE: DNS OK   │  ← só após migration_gate=ready
                   └─────────────────┘

Verificação de integridade (obrigatória)

Check Ferramenta / método
Contagem mensagens por pasta imapsync log + IMAP STATUS / SEARCH ALL
Contagem global Script Python migration_verify.py (a criar)
Amostra corpo/anexos 5 msgs aleatórias por pasta crítica
UIDL (Dovecot) doveadm fetch -u user uidl + diff
PST readpst -S stats vs destino
Falhas upload ERR_MBOX do imap-upload preservado

Regra: migration_gate bloqueia cutover DNS se messages_dest < messages_source * 0.99 ou checks críticos falharem.


Dependências de sistema (worker VM122 ou jump host)

# Debian/Ubuntu
apt-get install -y imapsync pst-utils python3 python3-pip
pip3 install pst2mbox  # Fase B opcional

# imap-upload
git clone https://github.com/rgladwell/imap-upload.git /opt/migration-tools/imap-upload

Carbonio (VM112): zmmailbox, zmprov — já presentes.


Referências