Sistema web desenvolvido em Next.js para facilitar a migração de emails do Zimbra para o Mailcow, permitindo que cada usuário importe manualmente sua caixa de email.
- ✅ Autenticação de usuários com NextAuth
- ✅ Gerenciamento de usuários pelo administrador
- ✅ Interface para upload de arquivos TGZ do Zimbra
- ✅ Processamento automático dos arquivos
- ✅ Transferência via SSH para o servidor Mailcow
- ✅ Execução automática de comandos (chown, chmod, doveadm)
- ✅ Painel administrativo para configurar o servidor Mailcow
- ✅ Acompanhamento em tempo real do progresso da migração
- ✅ Sistema de jobs para gerenciar múltiplas migrações
- Node.js 18+
- Servidor Mailcow configurado
- Acesso SSH ao servidor Mailcow (preferencialmente com chave SSH)
- Clone o repositório:
git clone <repo-url>
cd zimbra-mailcow-migration- Instale as dependências:
npm install- Configure as variáveis de ambiente:
cp .env .env.localEdite o arquivo .env.local e configure:
DATABASE_URL="file:./dev.db"
NEXTAUTH_SECRET="sua-chave-secreta-aleatoria-aqui"
NEXTAUTH_URL="http://localhost:3000"
UPLOAD_DIR="./uploads"Gere uma chave secreta com:
openssl rand -base64 32- Configure o banco de dados:
npm run setupEste comando irá:
- Criar as tabelas no banco de dados SQLite
- Gerar o cliente Prisma
- Criar um usuário admin padrão ([email protected] / admin123)
- Inicie o servidor de desenvolvimento:
npm run devO sistema estará disponível em http://localhost:3000
-
Acesse
http://localhost:3000 -
Faça login com as credenciais admin:
- Email:
[email protected] - Senha:
admin123
- Email:
-
IMPORTANTE: Configure o sistema antes de permitir migrações:
- Configure o servidor Mailcow no painel administrativo
- Cadastre os usuários que poderão fazer migrações
Como administrador, você precisa configurar a conexão com o servidor Mailcow:
-
Clique em "Admin" no menu superior, depois em "Configurações"
-
Preencha os dados do servidor:
- Host do Servidor: IP ou hostname do servidor Mailcow
- Porta SSH: Normalmente 22
- Usuário SSH: Usuário com permissões (ex: root)
- Chave Privada SSH: Cole sua chave privada SSH (recomendado)
- Senha SSH: Ou use senha (menos seguro)
- Caminho do vmail: Normalmente
/var/vmail
-
Clique em "Salvar Configuração"
IMPORTANTE: Apenas administradores podem cadastrar novos usuários. Não há registro público.
Os usuários cadastrados devem ter os mesmos endereços de email que estão configurados no Mailcow. Isso é essencial para que a migração funcione corretamente.
-
Clique em "Admin" no menu superior, depois em "Gerenciar Usuários"
-
Clique no botão "Novo Usuário"
-
Preencha os dados:
- Email: Use o mesmo email que existe no Mailcow (ex:
[email protected]) - Senha: Senha para acesso ao sistema de migração (mínimo 6 caracteres)
- Confirmar Senha: Repita a senha
- Administrador: Marque se o usuário também será admin
- Email: Use o mesmo email que existe no Mailcow (ex:
-
Clique em "Criar Usuário"
- Na lista de usuários, clique em "Remover" ao lado do usuário desejado
- Confirme a remoção
Nota: Não é possível remover sua própria conta de administrador.
Primeiro, exporte sua caixa de email do Zimbra:
zmmailbox -z -m [email protected] getRestURL "//?fmt=tgz" > backup.tgz-
Faça login no sistema
-
Na página principal, preencha:
- Endereço de Email: Seu email completo (ex: [email protected])
- Arquivo TGZ: Selecione o arquivo backup.tgz exportado do Zimbra
-
Clique em "Iniciar Migração"
O sistema mostrará o progresso da migração em tempo real:
- Pendente: Aguardando processamento
- Processando: Migração em andamento (mostra barra de progresso)
- Concluído: Migração finalizada com sucesso
- Falhou: Erro durante a migração (veja a mensagem de erro)
O sistema executa automaticamente os seguintes passos:
- Upload: Arquivo TGZ é enviado e armazenado no servidor
- Extração: Arquivo TGZ é extraído em arquivos EML individuais
- Transferência: Arquivos são transferidos via SSH/SCP para o Mailcow
- Permissões: Comando executado:
chown -R vmail:vmail /var/vmail/<dominio>/<usuario>/ - Permissões: Comando executado:
chmod -R 700 /var/vmail/<dominio>/<usuario>/ - Reindexação: Comando executado:
doveadm index -u [email protected] "*"
zimbra-mailcow-migration/
├── app/
│ ├── api/ # API Routes
│ │ ├── auth/ # Autenticação NextAuth
│ │ ├── upload/ # Upload de arquivos
│ │ ├── jobs/ # Listagem de jobs
│ │ ├── register/ # Registro (desabilitado)
│ │ └── admin/ # Rotas administrativas
│ │ ├── mailcow-config/ # Config do Mailcow
│ │ └── users/ # Gerenciamento de usuários
│ ├── dashboard/ # Dashboard do usuário
│ ├── admin/ # Painel administrativo
│ │ └── users/ # Gerenciamento de usuários
│ ├── login/ # Página de login
│ └── register/ # Redireciona para login
├── lib/
│ ├── auth.ts # Configuração NextAuth
│ ├── prisma.ts # Cliente Prisma
│ └── migration-worker.ts # Lógica de migração
├── prisma/
│ └── schema.prisma # Schema do banco de dados
└── scripts/
└── init-db.ts # Script de inicialização
O sistema usa SQLite por padrão (pode ser alterado no schema.prisma para PostgreSQL, MySQL, etc).
Modelos principais:
- User: Usuários do sistema
- MailcowConfig: Configuração do servidor Mailcow
- MigrationJob: Jobs de migração
Para deploy em produção:
- Configure variáveis de ambiente adequadas
- Use um banco de dados mais robusto (PostgreSQL recomendado)
- Configure HTTPS
- Altere a senha do admin
- Configure backup automático do banco de dados
Build para produção:
npm run build
npm run start- Senhas são hasheadas com bcryptjs
- Autenticação via JWT (NextAuth)
- Apenas admins podem cadastrar usuários (registro público desabilitado)
- Acesso SSH via chave privada (recomendado)
- Validação de permissões em todas as rotas
- Arquivos de upload isolados por usuário
- Usuários devem ter os mesmos emails do Mailcow
- Migração síncrona (uma por vez por usuário)
- Não suporta migração incremental
- Requer acesso SSH ao servidor Mailcow
- Arquivos grandes podem demorar
Para problemas ou dúvidas:
- Verifique os logs da aplicação
- Verifique os logs do servidor Mailcow
- Confirme que as credenciais SSH estão corretas
- Verifique as permissões no servidor Mailcow
MIT