Recursos
O que o mccb faz com as suas caixas de e-mail
Uma imagem, dois serviços: web (painel e API, porta 22362) e worker (fila de tarefas). O estado é SQLite e arquivos em ./data.
Origens e destinos
- Fontes
Arquivos PST e OST, Exchange local (EWS), Microsoft 365 (Graph), Google Workspace, IMAP, JMAP, CalDAV e CardDAV, e arquivos: mbox, Maildir, EML, MSG, ICS e VCF.
- Destinos
IMAP, CalDAV, CardDAV, JMAP e Exchange (EWS ou Graph). Nem toda origem é também destino: Google, PST e arquivos são origens somente leitura.
- E-mail, agendas, contatos e tarefas
As tarefas vão para onde o destino consegue guardá-las: Exchange, ou uma agenda CalDAV que aceite
VTODO. - Uma credencial para muitas caixas de e-mail
A personificação do Exchange, o Graph app-only e um usuário mestre IMAP chegam a todas as caixas de e-mail com uma só conta sua.
- Mais recentes primeiro
O e-mail é importado do mais recente para o mais antigo, em todas as pastas.
- De servidor para servidor
Não é preciso nenhum arquivo: de IMAP para IMAP, ou de Exchange, Microsoft 365 e Google para qualquer servidor IMAP, enquanto as pessoas continuam trabalhando.
- Regras de e-mail
As regras da caixa de entrada do Exchange são convertidas para Sieve com o melhor esforço, e enviadas por ManageSieve ou oferecidas como script.
A interface
- Quatro lugares
Migrações, Arquivos, Servidores e Configurações, em uma barra lateral no computador e em uma barra superior no celular. Nove idiomas.
- Primeiro os servidores
Escolha o provedor (Gmail, Microsoft 365, iCloud, Fastmail, Infomaniak ou qualquer servidor IMAP) e o formulário se preenche sozinho, com o que o provedor pede. Cada servidor mostra se está verificado.
- Um formulário por migração
De: um arquivo ou um servidor ativo, configurado e testado ali mesmo. Para: o servidor e a caixa de e-mail.
- Um painel que diz o que vem em seguida
Cada caixa de e-mail mostra a origem, o destino e o que copiar, marcados como pronto ou não, e um botão de iniciar que diz o que falta.
- Status por extenso
Cada estado é um ícone e uma palavra, nunca só uma cor. O que precisa de você vem primeiro na lista.
Colocar os arquivos para dentro
- Fila de envio
Um arquivo por vez por padrão, na ordem que você escolher. Reordene, pause, retome ou cancele.
- Envios que podem ser retomados
Arquivos grandes são enviados em partes, cada uma verificada por SHA-256. O espaço livre é verificado antes.
- Pasta de entrada
Copie arquivos para uma pasta do servidor com rsync ou um mount, e o worker os pega.
- Busca no servidor
O servidor baixa o arquivo por conta própria, por HTTP(S), SFTP ou um serviço compatível com S3.
- Pré-visualização
Veja os acentos e os anexos antes de qualquer gravação.
Planejar e controlar
- Simulação
Conecta, lista e conta, e não grava nada em nenhum destino. Avisa sobre cota e mensagens grandes demais.
- Mapeamento de pastas e filtros
Mapeie pastas, exclua pastas e filtre por data ou tamanho máximo, por servidor ou por caixa de e-mail.
- Horários e largura de banda
Horários permitidos e um limite de largura de banda por servidor.
- Lotes
Lotes nomeados, com ações em grupo e uma ordem de fila.
- Ressincronização final e comparação
Uma última passagem por mensagens IMAP novas na virada e uma comparação entre origem e destino em CSV e no relatório.
Fazer tudo de uma vez
- Caixas de e-mail por CSV
Adicione as caixas de e-mail uma a uma, ou por CSV (
email;password[;login]). A exportação nunca contém uma senha. - Linha de comando e tokens de API
O comando
mccbenvia com retomada, inicia migrações e as acompanha, sem navegador. - Notificações
Avisar quando os envios, as análises e as migrações terminam, por ntfy, webhook ou e-mail.
- Relatórios
Progresso ao vivo, log e relatório JSON por caixa de e-mail.
Seguro para interromper
- Retomar sem duplicatas
Pausa, parada, falha ou reinício: uma retomada verifica o servidor e nunca duplica uma mensagem.
- As falhas ficam contidas
Cada tarefa e cada análise de PST roda no próprio subprocesso, então uma falha da biblioteca PST nativa não derruba o worker.
- Verificações
Depois da fase de e-mail, a contagem de mensagens de cada pasta é comparada com o que foi enviado, e uma amostra de mensagens é relida e comparada por hash. Nos destinos Exchange só se faz a contagem.
A operação
- Ajuste
Ajuste automático ou manual dos construtores de mensagens e das conexões IMAP, por servidor.
- Senhas das caixas de e-mail
Armazenadas criptografadas. O aplicativo consegue descriptografá-las, então proteja
./datae aSECRET_KEY. - Backup
Está tudo em
./data, incluindosecret.key: sem ela, as senhas das caixas de e-mail armazenadas não podem ser descriptografadas.
O que ele não faz
- Rodar já em Exchange ou Google reais
Os conectores Exchange, Microsoft 365 e Google só foram testados contra servidores simulados. Experimente primeiro uma caixa de e-mail com poucos itens.
- Manter a data de recebimento no Microsoft 365
O e-mail gravado pelo Graph recebe a data da importação. O IMAP com OAuth2 como destino a mantém.
- Gravar os participantes discretamente no Microsoft 365
O Graph envia e-mail a todos os participantes de um evento que cria. Por padrão, os participantes são gravados como texto no corpo do evento. Organizadores e respostas não são mantidos em um destino Exchange.
- Migrar caixas de arquivo morto pelo Graph
Os arquivos mortos do Microsoft 365 não são acessíveis. Mova antes o conteúdo deles para a caixa de e-mail principal.
- Agendas JMAP
Não implementado. Use CalDAV para as agendas de um provedor JMAP.
- Copiar tudo
Os anexos de eventos e as fotos de contatos não são copiados. Os corpos de eventos, contatos e tarefas são texto simples.
- Manter a sincronização
Uma migração copia em um só sentido. Uma ressincronização final, iniciada manualmente, acrescenta o que chegou nesse meio tempo, mas uma alteração ou exclusão na origem depois da cópia não é transferida.
- Ler todos os arquivos
Um Maildir ou uma pasta de mensagens precisa ser compactado em zip. Um
.msgé convertido com o melhor esforço, sem corpos só RTF, mensagens incorporadas nem objetos OLE. - Vários administradores
Um único administrador: uma senha compartilhada, sem contas nem papéis. Os tokens de API não expiram, revogue-os manualmente.
- Vários hosts
SQLite em um disco local: um único host, sem alta disponibilidade, sem NFS.
- PSTs criptografados
Os PSTs criptografados ou protegidos por senha não têm tratamento dedicado. Geram erros ou são marcados como inválidos. Não conte com isso.
- Sobreviver a qualquer PST corrompido
Um PST corrompido pode derrubar o libpff. Os itens afetados são ignorados e registrados e, passando de
MAX_CHILD_CRASHESfalhas, a tarefa falha. - Prometer a entrega das notificações
A entrega é feita com o melhor esforço: três tentativas e depois a mensagem é descartada. Um tópico ntfy público pode ser lido por qualquer pessoa que saiba o nome dele.
- HTTPS
A porta 22362 fala HTTP simples. Coloque o mccb atrás de um proxy reverso e não exponha a porta diretamente.
- Outras arquiteturas
A imagem publicada é só para
linux/amd64. - Decodificar tudo com perfeição
Itens sem informação de charset podem ser decodificados de forma imperfeita em alguns idiomas.
- Compensar o servidor de destino
Os resultados dependem do servidor IMAP, DAV, JMAP ou Exchange de destino.
Coloque o mccb para rodar
Abra http:// e entre com a senha impressa. Ela é mostrada uma única vez. Os detalhes estão na documentação.
$ mkdir mccb && cd mccb
$ curl -fsSLO https://raw.githubusercontent.com/selfhostr/mccb/main/docker-compose.yml
$ docker compose up -d
$ docker compose logs web | grep -A2 "Admin password"