
Quem já precisou migrar caixas de e-mail entre servidores conhece o imapsync, a clássica ferramenta em Perl do Gilles Lamiral. Ela resolve o problema, mas arrasta uma cadeia de dependências de módulos Perl que nem sempre é divertida de instalar. O go-imapsync é uma reimplementação do essencial do imapsync em Go: sincronização IMAP one-way e incremental de host1 → host2, sem duplicados, distribuída como um único binário estático — sem runtime, sem dependências, é baixar e rodar.
O que ele faz
O go-imapsync conecta em duas contas IMAP ao mesmo tempo (origem e destino), replica a árvore de pastas e copia as mensagens que ainda não existem no destino, preservando flags (lida, respondida, etc.) e a data interna de cada mensagem. A detecção de duplicados usa cabeçalhos (Message-Id e Received, o mesmo modelo do imapsync original), então você pode rodar quantas vezes quiser: cada execução é incremental e só transfere o que falta.
Recursos do MVP atual:
- SSL/IMAPS (padrão, porta 993) e STARTTLS
- Listagem recursiva de pastas na origem + criação automática no destino
- FETCH/APPEND das mensagens com flags e data interna preservadas
- Pulo de duplicados por cabeçalho — execução incremental e re-executável
- Modos seguros de teste:
--drye--justfolders - Resumo ao final da execução e exit codes bem definidos (
0sucesso,1falha de execução,2erro de uso/configuração — ótimo para scripts)
Instalação
A forma mais rápida é baixar o binário pronto na página de Releases. Há builds para Linux x86_64, macOS Apple Silicon e Windows x86_64:
wget https://github.com/jniltinho/go-imapsync/releases/download/v0.1.3/go-imapsync_0.1.3_linux_amd64.tar.gz
tar xzf go-imapsync_0.1.3_linux_amd64.tar.gz
sudo mv go-imapsync /usr/local/bin/
go-imapsync version
Prefere compilar? Com Go 1.26+ instalado:
git clone https://github.com/jniltinho/go-imapsync.git
cd go-imapsync
make build # binário estático em dist/go-imapsync
make test # go test -race ./...
Uso: comece devagar
A filosofia é a mesma dos exemplos do imapsync clássico: valide antes de transferir. A sequência segura é rodar primeiro só as pastas em modo simulação, depois criar as pastas de verdade, depois simular a cópia das mensagens e só então sincronizar tudo:
# 1. Simula apenas a estrutura de pastas (não altera nada)
go-imapsync
--host1 imap.origem.com --user1 alice --password1 'segredo1'
--host2 imap.destino.com --user2 bob --password2 'segredo2'
--justfolders --dry
# 2. Cria as pastas no destino
go-imapsync ... --justfolders
# 3. Simula a transferência das mensagens
go-imapsync ... --dry
# 4. Sincroniza de verdade
go-imapsync ...
Senhas na linha de comando ficam no histórico do shell — em produção, prefira as variáveis de ambiente, que nunca aparecem nos logs:
export GOIMAPSYNC_PASSWORD1='segredo-da-origem'
export GOIMAPSYNC_PASSWORD2='segredo-do-destino'
go-imapsync --host1 imap.origem.com --user1 alice
--host2 imap.destino.com --user2 bob
Flags mais úteis
--host1/--user1/--password1/--port1— conta de origem (idem*2para o destino)--ssl1/--nossl1e--tls1/--notls1— IMAPS (padrão) ou STARTTLS, por servidor--dry— só relata o que faria; nenhum CREATE/APPEND no destino--justfolders— sincroniza apenas pastas, sem corpos de mensagem--skipemptyfolders— não espelha pastas vazias--useheader— cabeçalhos usados na identidade da mensagem (padrãoMessage-IdeReceived)--logfile— grava o log também em arquivo--timeout— timeout de rede (padrão 60s)--insecuretls— pula a verificação TLS (somente laboratório)
Docker
O repositório traz um Dockerfile pronto. As credenciais entram por env ou flags em tempo de execução — nunca ficam na imagem:
make docker-build
docker run --rm
-e GOIMAPSYNC_PASSWORD1 -e GOIMAPSYNC_PASSWORD2
go-imapsync:dev
--host1 imap.origem.com --user1 alice
--host2 imap.destino.com --user2 bob --dry
O que vem por aí
O projeto é um MVP e o roadmap está aberto no repositório: filtros e mapeamento de pastas, --delete1/--delete2, autenticação XOAUTH2, labels do Gmail e migração em massa via CSV estão na fila. O código é MIT, com testes (go test -race), lint e CI no GitHub Actions — contribuições são bem-vindas via CONTRIBUTING.md.
Se você administra servidores de e-mail ou tem uma migração IMAP na agenda, teste o go-imapsync — e se ele te poupar uma tarde de luta com módulos Perl, deixe uma estrela no repositório e abra uma issue contando como foi.