mccb

Funcionalidades

O que o mccb faz com as suas caixas de correio

Uma imagem, dois serviços: web (painel e API, porta 22362) e worker (fila de tarefas). O estado é SQLite e ficheiros em ./data.

Origens e destinos

  • Fontes

    Ficheiros PST e OST, Exchange local (EWS), Microsoft 365 (Graph), Google Workspace, IMAP, JMAP, CalDAV e CardDAV, e ficheiros: mbox, Maildir, EML, MSG, ICS e VCF.

  • Destinos

    IMAP, CalDAV, CardDAV, JMAP e Exchange (EWS ou Graph). Nem todas as origens são também destinos: Google, PST e ficheiros são origens só de leitura.

  • Correio, calendários, contactos e tarefas

    As tarefas vão para onde o destino as consegue guardar: Exchange, ou um calendário CalDAV que aceite VTODO.

  • Uma credencial para muitas caixas de correio

    A personificação do Exchange, o Graph app-only e um utilizador mestre IMAP chegam a todas as caixas de correio com uma só conta sua.

  • Mais recentes primeiro

    O correio é importado do mais recente para o mais antigo, em todas as pastas.

  • De servidor para servidor

    Não é preciso nenhum ficheiro: de IMAP para IMAP, ou de Exchange, Microsoft 365 e Google para qualquer servidor IMAP, enquanto as pessoas continuam a trabalhar.

  • Regras de correio

    As regras da caixa de entrada do Exchange são convertidas para Sieve com o melhor esforço, e carregadas por ManageSieve ou oferecidas como script.

A interface

  • Quatro locais

    Migrações, Ficheiros, Servidores e Definições, numa barra lateral no computador e numa barra superior no telemóvel. Nove idiomas.

  • Primeiro os servidores

    Escolha o fornecedor (Gmail, Microsoft 365, iCloud, Fastmail, Infomaniak ou qualquer servidor IMAP) e o formulário preenche-se sozinho, com o que o fornecedor pede. Cada servidor mostra se está verificado.

  • Um formulário por migração

    De: um ficheiro ou um servidor ativo, configurado e testado no próprio local. Para: o servidor e a caixa de correio.

  • Um painel que diz o que vem a seguir

    Cada caixa de correio mostra a origem, o destino e o que copiar, marcados como pronto ou não, e um botão de início que diz o que falta.

  • Estado por extenso

    Cada estado é um ícone e uma palavra, nunca só uma cor. O que precisa de si vem primeiro na lista.

Fazer entrar os ficheiros

  • Fila de envio

    Um ficheiro de cada vez por predefinição, pela ordem que escolher. Reordene, pause, retome ou cancele.

  • Envios retomáveis

    Os ficheiros grandes são carregados em blocos, cada um verificado por SHA-256. O espaço livre é verificado primeiro.

  • Pasta de entrada

    Copie ficheiros para uma pasta do servidor com rsync ou um mount, e o worker apanha-os.

  • Obtenção no servidor

    O servidor descarrega o ficheiro por si, por HTTP(S), SFTP ou um serviço compatível com S3.

  • Pré-visualização

    Veja os acentos e os anexos antes de se escrever o que quer que seja.

Planear e controlar

  • Simulação

    Liga-se, lista e conta, e não escreve nada em nenhum destino. Avisa sobre quota e mensagens demasiado grandes.

  • Mapeamento de pastas e filtros

    Mapeie pastas, exclua pastas e filtre por data ou tamanho máximo, por servidor ou por caixa de correio.

  • Horas e largura de banda

    Horas permitidas e um limite de largura de banda por servidor.

  • Lotes

    Lotes com nome, com ações de grupo e uma ordem de fila.

  • Ressincronização final e comparação

    Uma última passagem por mensagens IMAP novas na transição e uma comparação entre origem e destino em CSV e no relatório.

Fazer tudo de uma vez

  • Caixas de correio por CSV

    Adicione as caixas de correio uma a uma, ou por CSV (email;password[;login]). A exportação nunca contém uma palavra-passe.

  • Linha de comandos e tokens de API

    O comando mccb envia com retoma, inicia migrações e acompanha-as, sem navegador.

  • Notificações

    Avisar quando os envios, as análises e as migrações terminam, por ntfy, webhook ou email.

  • Relatórios

    Progresso em direto, log e relatório JSON por caixa de correio.

Seguro para interromper

  • Retomar sem duplicados

    Pausa, paragem, falha ou reinício: uma retoma verifica o servidor e nunca duplica uma mensagem.

  • As falhas ficam contidas

    Cada tarefa e cada análise de PST corre no seu próprio subprocesso, por isso uma falha da biblioteca PST nativa não derruba o worker.

  • Verificações

    Depois da fase de correio, 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 ligações IMAP, por servidor.

  • Palavras-passe das caixas de correio

    Guardadas cifradas. A aplicação consegue decifrá-las, por isso proteja ./data e a SECRET_KEY.

  • Cópia de segurança

    Está tudo em ./data, incluindo secret.key: sem ela, as palavras-passe das caixas de correio guardadas não podem ser decifradas.

O que não faz

  • Executar já em Exchange ou Google reais

    Os conectores Exchange, Microsoft 365 e Google só foram testados contra servidores simulados. Experimente primeiro uma caixa de correio com poucos itens.

  • Manter a data de receção no Microsoft 365

    O correio escrito pelo Graph recebe a data da importação. O IMAP com OAuth2 como destino mantém-na.

  • Escrever os participantes discretamente no Microsoft 365

    O Graph envia email a todos os participantes de um evento que cria. Por predefinição, os participantes são escritos como texto no corpo do evento. Os organizadores e as respostas não são mantidos num destino Exchange.

  • Migrar caixas de arquivo pelo Graph

    Os arquivos do Microsoft 365 não são acessíveis. Mova primeiro o seu conteúdo para a caixa de correio principal.

  • Calendários JMAP

    Não implementado. Use CalDAV para os calendários de um fornecedor JMAP.

  • Copiar tudo

    Os anexos de eventos e as fotografias de contactos não são copiados. Os corpos de eventos, contactos e tarefas são texto simples.

  • Manter a sincronização

    Uma migração copia num só sentido. Uma ressincronização final, iniciada à mão, acrescenta o que chegou entretanto, mas uma alteração ou eliminação na origem depois da cópia não é transferida.

  • Ler todos os ficheiros

    Um Maildir ou uma pasta de mensagens tem de 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 palavra-passe partilhada, sem contas nem funções. Os tokens de API não expiram, revogue-os à mão.

  • Vários hosts

    SQLite num disco local: um único host, sem alta disponibilidade, sem NFS.

  • PSTs cifrados

    Os PSTs cifrados ou protegidos por palavra-passe não têm tratamento dedicado. Dão erros ou são marcados como inválidos. Não conte com isso.

  • Sobreviver a qualquer PST corrompido

    Um PST corrompido pode fazer o libpff falhar. Os itens afetados são ignorados e registados e, passado 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 seu nome.

  • HTTPS

    A porta 22362 fala HTTP simples. Ponha o mccb atrás de um proxy inverso e não exponha a porta diretamente.

  • Outras arquiteturas

    A imagem publicada é só para linux/amd64.

  • Descodificar tudo na perfeição

    Os itens sem informação de charset podem ser descodificados de forma imperfeita em alguns idiomas.

  • Compensar o servidor de destino

    Os resultados dependem do servidor IMAP, DAV, JMAP ou Exchange de destino.

Pôr mccb a funcionar

Abra http://:22362 e inicie sessão com a palavra-passe impressa. É mostrada uma só 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"