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
mccbenvia 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
./datae aSECRET_KEY. - Cópia de segurança
Está tudo em
./data, incluindosecret.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_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 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:// 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"