mccb

Funciones

Qué hace mccb con tus buzones

Una imagen, dos servicios: web (panel y API, puerto 22362) y worker (cola de trabajos). El estado es SQLite y archivos en ./data.

Orígenes y destinos

  • Fuentes

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

  • Destinos

    IMAP, CalDAV, CardDAV, JMAP y Exchange (EWS o Graph). No todo origen es también destino: Google, PST y los archivos son solo orígenes de lectura.

  • Correo, calendarios, contactos y tareas

    Las tareas van donde el destino puede guardarlas: Exchange, o un calendario CalDAV que acepte VTODO.

  • Una credencial para muchos buzones

    La suplantación de Exchange, Graph solo de aplicación y un usuario maestro IMAP llegan a todos los buzones con una sola cuenta tuya.

  • Primero lo más nuevo

    El correo se importa del más nuevo al más antiguo, en todas las carpetas.

  • De servidor a servidor

    No hace falta ningún archivo: de IMAP a IMAP, o de Exchange, Microsoft 365 y Google a cualquier servidor IMAP, mientras la gente sigue trabajando.

  • Reglas de correo

    Las reglas de bandeja de entrada de Exchange se convierten a Sieve en la medida de lo posible, y se suben por ManageSieve o se ofrecen como script.

La interfaz

  • Cuatro lugares

    Migraciones, Archivos, Servidores y Ajustes, en una barra lateral en el ordenador y una barra superior en el móvil. Nueve idiomas.

  • Primero los servidores

    Elige el proveedor (Gmail, Microsoft 365, iCloud, Fastmail, Infomaniak o cualquier servidor IMAP) y el formulario se rellena solo, con lo que pide el proveedor. Cada servidor indica si está verificado.

  • Un formulario por migración

    Origen: un archivo o un servidor en vivo, configurado y probado en el sitio. Destino: el servidor y el buzón.

  • Un panel que dice qué sigue

    Cada buzón muestra su origen, su destino y lo que se va a copiar, marcado como listo o no, y un botón de inicio que dice qué falta.

  • Estado en palabras

    Cada estado es un icono y una palabra, nunca solo un color. Lo que te necesita aparece primero en la lista.

Cómo meter los archivos

  • Cola de subida

    Un archivo cada vez por defecto, en el orden que elijas. Reordena, pausa, reanuda o cancela.

  • Subidas reanudables

    Los archivos grandes se suben por partes, y cada una se verifica con SHA-256. Antes se comprueba el espacio libre.

  • Carpeta de entrega

    Copia los archivos en una carpeta del servidor con rsync o un montaje, y el worker los recoge.

  • Descarga desde el servidor

    El servidor descarga el archivo él mismo por HTTP(S), SFTP o un servicio compatible con S3.

  • Vista previa

    Mira los acentos y los adjuntos antes de que se escriba nada.

Planificar y controlar

  • Simulación

    Se conecta, lista y cuenta, y no escribe nada en ningún destino. Avisa de la cuota y de los mensajes demasiado grandes.

  • Asignación de carpetas y filtros

    Asigna carpetas, excluye carpetas y filtra por fecha o por tamaño máximo, por servidor o por buzón.

  • Horas y ancho de banda

    Horas permitidas y límite de ancho de banda por servidor.

  • Lotes

    Lotes con nombre, con acciones de grupo y un orden de cola.

  • Resincronización final y comparación

    Una última pasada para los mensajes IMAP nuevos en el momento del traspaso, y una comparación entre origen y destino en CSV y en el informe.

Pensado para lotes

  • Buzones por CSV

    Añade los buzones uno a uno, o por CSV (email;password[;login]). La exportación nunca contiene una contraseña.

  • Línea de comandos y tokens de API

    El comando mccb sube con reanudación, inicia migraciones y las sigue, sin navegador.

  • Notificaciones

    Te avisa cuando terminan las subidas, los análisis y las migraciones, por ntfy, webhook o correo.

  • Informes

    Progreso en directo, log e informe JSON por buzón.

Se puede interrumpir sin riesgo

  • Reanudar sin duplicados

    Pausa, parada, fallo o reinicio: una reanudación comprueba el servidor y nunca duplica un mensaje.

  • Los fallos quedan contenidos

    Cada trabajo y cada análisis de PST se ejecuta en su propio subproceso, así que un fallo de la biblioteca nativa de PST no puede tumbar el worker.

  • Comprobaciones

    Tras la fase de correo, se compara el número de mensajes de cada carpeta con lo enviado, y se relee una muestra de mensajes y se compara por hash. En los destinos Exchange solo se cuenta.

La operación

  • Ajuste

    Ajuste automático o manual de los generadores de mensajes y las conexiones IMAP, por servidor.

  • Contraseñas de buzón

    Se guardan cifradas. La aplicación puede descifrarlas, así que protege ./data y la SECRET_KEY.

  • Copia de seguridad

    Todo está en ./data, incluido secret.key: sin él no se pueden descifrar las contraseñas de buzón guardadas.

Lo que no hace

  • Probado ya en Exchange o Google reales

    Los conectores de Exchange, Microsoft 365 y Google solo se han probado con servidores simulados. Prueba primero un buzón con pocos elementos.

  • Conservar la fecha de recepción en Microsoft 365

    El correo escrito a través de Graph recibe la fecha de la importación. IMAP con OAuth2 como destino la conserva.

  • Escribir a los asistentes sin avisarles en Microsoft 365

    Graph envía un correo a cada asistente de un evento que crea. Por defecto los asistentes se escriben como texto en el cuerpo del evento. Los organizadores y las respuestas no se conservan en un destino Exchange.

  • Migrar buzones de archivo con Graph

    Los archivos de Microsoft 365 no son accesibles. Mueve antes su contenido al buzón principal.

  • Calendarios JMAP

    No implementado. Usa CalDAV para los calendarios de un proveedor JMAP.

  • Copiarlo todo

    Los adjuntos de eventos y las fotos de contactos no se copian. Los cuerpos de eventos, contactos y tareas son texto sin formato.

  • Mantener la sincronización

    Una migración copia en un solo sentido. Una resincronización final, iniciada a mano, añade lo que llegó desde entonces, pero un cambio o una eliminación en el origen posterior a su copia no se traslada.

  • Leer todos los archivos

    Un Maildir o una carpeta de mensajes debe comprimirse en un zip. Un .msg se convierte en la medida de lo posible, sin cuerpos solo RTF, mensajes incrustados ni objetos OLE.

  • Varios administradores

    Un único administrador: una contraseña compartida, sin cuentas ni roles. Los tokens de API no caducan, revócalos a mano.

  • Varios hosts

    SQLite en un disco local: un solo host, sin alta disponibilidad, sin NFS.

  • PST cifrados

    Los PST cifrados o protegidos con contraseña no tienen un tratamiento específico. Dan errores o se marcan como no válidos. No cuentes con ello.

  • Sobrevivir a cualquier PST dañado

    Un PST dañado puede bloquear libpff. Los elementos afectados se omiten y se informan, y al superar MAX_CHILD_CRASHES fallos el trabajo falla.

  • Prometer la entrega de notificaciones

    La entrega se hace en la medida de lo posible: tres intentos y después el mensaje se descarta. Un tema ntfy público puede leerlo cualquiera que conozca su nombre.

  • HTTPS

    El puerto 22362 habla HTTP sin cifrar. Pon mccb detrás de un proxy inverso y no expongas el puerto directamente.

  • Otras arquitecturas

    La imagen publicada es solo para linux/amd64.

  • Decodificarlo todo a la perfección

    Los elementos sin información de codificación pueden decodificarse de forma imperfecta en algunos idiomas.

  • Compensar al servidor de destino

    Los resultados dependen del servidor IMAP, DAV, JMAP o Exchange de destino.

Pon mccb en marcha

Abre http://:22362 e inicia sesión con la contraseña impresa. Se muestra una sola vez. Los detalles están en la documentación.

$ 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"