mccb

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 mccb envia 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 ./data e a SECRET_KEY.

  • Backup

    Está tudo em ./data, incluindo secret.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_CRASHES falhas, 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://:22362 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"