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
mccbsube 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
./datay laSECRET_KEY. - Copia de seguridad
Todo está en
./data, incluidosecret.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
.msgse 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_CRASHESfallos 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:// 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"