Mail-Archiver: Archivado, búsqueda y exportación de correos multi-cuenta
Aplicación web para archivar, buscar y exportar correos de múltiples cuentas con sincronización de carpetas, soporte de adjuntos, migración de buzones y panel de control
Vídeo tutorial en YouTube
Mira el vídeo completo sobre cómo instalar y usar Mail-Archiver: Archivado, búsqueda y exportación de correos multi-cuenta en el canal GENBYTE:
¿Qué es Mail-Archiver: Archivado, búsqueda y exportación de correos multi-cuenta?
Mail-Archiver es una aplicación web de código abierto desarrollada en C# sobre .NET que permite archivar, buscar y exportar correos electrónicos desde múltiples cuentas. Ofrece sincronización automática programada, interfaz multilingüe con modo oscuro, autenticación OpenID Connect, API REST de solo lectura y servidor MCP para acceso programático y por agentes de IA. Soporta proveedores IMAP, Microsoft 365 mediante Microsoft Graph, cuentas personales de Microsoft (Outlook.com, Hotmail, live.com) mediante OAuth2 Device Code Flow y cuentas de solo importación para migrar archivos existentes. Incluye gestión multi-usuario con permisos por cuenta, panel de estadísticas y almacenamiento, registro de accesos detallado, políticas de retención configurables y bloqueo de eliminación para cumplimiento normativo. La implementación recomendada utiliza Docker Compose con PostgreSQL como base de datos.
Características principales
Archivado automático multi-cuenta
Sincronización programada desde múltiples cuentas de correo con soporte para IMAP, Microsoft 365 (Microsoft Graph) y cuentas personales de Microsoft (Outlook.com, Hotmail, live.com) mediante OAuth2 Device Code Flow sin necesidad de registro de aplicación en Azure.
Búsqueda avanzada y vista previa
Búsqueda con filtros, vista previa de correos con adjuntos y exportación de cuentas completas o correos seleccionados en formato mbox o EML comprimido en ZIP.
Acceso programático y para agentes de IA
API REST v1 de solo lectura con claves API por usuario y ámbito, y servidor MCP (Model Context Protocol) opcional en endpoint /mcp que expone herramientas como search_emails, get_email, list_accounts, list_folders y get_attachment.
Gestión de usuarios y permisos
Soporte multi-usuario con permisos específicos por cuenta, panel de control con estadísticas y monitorización de almacenamiento, y registro detallado de accesos (login, apertura, búsquedas, exportaciones).
Importación, restauración y migración
Importación de archivos MBox y EML (ZIP) con estructura de carpetas, restauración de correos o buzones completos, y migración de buzones preservando la estructura de carpetas entre cuentas.
Políticas de retención y cumplimiento
Eliminación automática en el servidor de correo tras período configurable (por cuenta: 30, 90, 365 días), retención separada en archivo local, y bloqueo de eliminación manual mediante DeletionPolicy__DeletionAllowed=false para cumplimiento normativo.
Interfaz moderna y accesible
Interfaz responsiva multilingüe con modo oscuro construida con Bootstrap, diseñada para uso en navegador detrás de proxy inverso con HTTPS.
Requisitos del sistema
- Docker
- Docker Compose
- Servidor con acceso a internet para descargar imágenes
- Proxy inverso (nginx, Traefik, Caddy, etc.) para terminación HTTPS en producción
Instalación con Docker Compose
Crear archivo docker-compose.yml
Define los servicios mailarchive-app y postgres con volúmenes persistentes, variables de entorno para conexión a base de datos, credenciales de administrador y zona horaria. Usa la imagen oficial s1t5/mailarchiver:latest y PostgreSQL 14/17 Alpine.
networks:
postgres:
services:
mailarchive-app:
image: s1t5/mailarchiver:latest
restart: always
environment:
– ConnectionStrings__DefaultConnection=Host=postgres;Database=MailArchiver;Username=mailuser;Password=masterkey;
– Authentication__Username=admin
– Authentication__Password=secure123!
– TimeZone__DisplayTimeZoneId=Etc/UTC
ports:
– "5000:5000"
networks:
– postgres
volumes:
– ./data-protection-keys:/app/DataProtection-Keys
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:17-alpine
restart: always
environment:
POSTGRES_DB: MailArchiver
POSTGRES_USER: mailuser
POSTGRES_PASSWORD: masterkey
volumes:
– ./postgres-data:/var/lib/postgresql/data
networks:
– postgres
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mailuser -d MailArchiver"]
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
networks:
postgres:
Configurar variables de entorno seguras
Edita el archivo docker-compose.yml y establece contraseñas seguras en POSTGRES_PASSWORD y en la cadena de conexión ConnectionStrings__DefaultConnection. Define usuario y contraseña de administrador en Authentication__Username y Authentication__Password. Ajusta TimeZone__DisplayTimeZoneId a tu zona horaria IANA (ej. Europe/Madrid, America/Mexico_City).
Configurar proxy inverso con HTTPS
La aplicación no proporciona HTTPS nativo. Configura un proxy inverso (nginx, Traefik, Caddy) que termine TLS y reenvíe al puerto 5000 del contenedor. Esto es obligatorio en entornos de producción.
Iniciar los contenedores
Ejecuta docker compose up -d para crear e iniciar los servicios en segundo plano. La base de datos se inicializará automáticamente al primer arranque.
Acceder y configurar la primera cuenta
Abre el navegador en la URL del proxy inverso, inicia sesión con las credenciales de administrador definidas, ve a la sección "Cuentas de correo", pulsa "Nueva cuenta", introduce los datos del servidor y credenciales, guarda y comienza el archivado. Opcionalmente crea más usuarios y asigna cuentas.
Acceder al proyecto
Interfaz web
Acceso mediante navegador a la URL configurada en el proxy inverso HTTPS. Puerto interno del contenedor: 5000 (HTTP). Requiere login con usuario y contraseña definidos en variables de entorno Authentication__Username y Authentication__Password.
API REST (v1)
Endpoint de solo lectura accesible con claves API por usuario y ámbito. Documentación en doc/API.md del repositorio. Permite acceso programático al archivo sin exponer credenciales de buzón.
Servidor MCP
Endpoint opcional Streamable HTTP en /mcp que expone el archivo a agentes de IA como herramientas descubribles (search_emails, get_email, list_accounts, list_folders, get_attachment). Documentación en doc/MCP.md.
Casos de uso
- Archivado centralizado de correos de múltiples cuentas personales y corporativas
- Búsqueda unificada y exportación de correos para auditorías, cumplimiento legal o migración
- Migración de buzones entre proveedores preservando estructura de carpetas
- Copia de seguridad automatizada de correos con políticas de retención configurables
- Acceso programático al archivo mediante API REST para integraciones internas
- Exposición del archivo a asistentes de IA mediante protocolo MCP
- Cumplimiento normativo con bloqueo de eliminación manual y retención controlada
- Importación de archivos históricos MBox/EML para consolidar archivos legacy
Configuración avanzada
Autenticación OpenID Connect (OIDC)
Configuración de proveedores OIDC para inicio de sesión único. Requiere editar appsettings.json o variables de entorno según guía doc/OIDC_Implementation.md.
Importación de archivos locales
Monta un volumen en el contenedor y configura LocalImport.AllowedPaths en appsettings.json para permitir importación de archivos MBox/EML desde rutas del host.
– /ruta/host/mbox:/data/import
# En appsettings.json:
# "LocalImport": { "AllowedPaths": ["/data/import"] }
Configuración de Microsoft 365 (Graph API)
Registro de aplicación en Azure AD con permisos Mail.Read, Mail.ReadBasic.All, etc. Configuración de Client ID, Tenant ID y Client Secret. Guía completa en doc/AZURE_APP_REGISTRATION_M365.md.
Cuentas personales de Microsoft (MSA)
Uso de OAuth2 Device Code Flow con Client ID pre-registrado compartido, sin necesidad de registro en Azure. Guía en doc/MSA_Outlook_Setup.md.
Importación masiva de inquilino M365
Formulario único para importar todos los buzones de un inquilino M365, con opción de seleccionar buzones específicos, omitir existentes y deshabilitados. Guía en doc/M365TenantImport.md.
Políticas de retención por cuenta
Configuración de días de retención en servidor (ej. 30, 90, 365) y retención separada en archivo local. Eliminación automática programada. Guía en doc/RetentionPolicies.md.
Bloqueo de eliminación (Compliance)
Establecer DeletionPolicy__DeletionAllowed=false para impedir eliminación manual de correos archivados. La retención local automática sigue funcionando. Guía en doc/Setup.md#deletion-policy-settings.
Gestión y mantenimiento
Actualización de la imagen
Descargar la imagen más reciente y reiniciar los contenedores para aplicar actualizaciones.
docker compose up -d
Reinicio de servicios
Reiniciar los contenedores sin recrearlos para aplicar cambios de configuración en variables de entorno.
Copia de seguridad de la base de datos
Realizar copias de seguridad periódicas del volumen postgres-data o usar pg_dump contra el contenedor PostgreSQL. Guía referenciada en doc/BackupRestore.md.
Consulta de logs de la aplicación
Los logs se escriben en el volumen ./logs montado en /app/logs dentro del contenedor. También accesibles vía docker logs.
# O inspeccionar archivos en ./logs del host
Rotación de claves de protección de datos
El volumen ./data-protection-keys persiste las claves de ASP.NET Core Data Protection. No eliminar este volumen para mantener validez de cookies y tokens tras reinicios.
Stack técnico
- C# / .NET 10 (ASP.NET Core)
- PostgreSQL 14/17
- Docker / Docker Compose
- Bootstrap (UI responsiva, modo oscuro)
- MailKit (cliente IMAP)
- Microsoft Graph SDK (M365)
- Entity Framework Core (ORM)
- OpenID Connect (autenticación federada)
- Model Context Protocol (MCP) para IA
Referencias oficiales
- Repositorio oficial en GitHub: https://github.com/s1t5/mail-archiver
- Sitio web del proyecto: https://mail-archiver.org
- Documentación índice (doc/Index.md): https://github.com/s1t5/mail-archiver/blob/main/doc/Index.md
- Guía de API REST: https://github.com/s1t5/mail-archiver/blob/main/doc/API.md
- Guía de servidor MCP: https://github.com/s1t5/mail-archiver/blob/main/doc/MCP.md
- Guía de implementación OIDC: https://github.com/s1t5/mail-archiver/blob/main/doc/OIDC_Implementation.md
- Guía de registro de aplicación Azure M365: https://github.com/s1t5/mail-archiver/blob/main/doc/AZURE_APP_REGISTRATION_M365.md
- Guía de configuración cuentas Microsoft personales (MSA): https://github.com/s1t5/mail-archiver/blob/main/doc/MSA_Outlook_Setup.md
- Guía de importación masiva inquilino M365: https://github.com/s1t5/mail-archiver/blob/main/doc/M365TenantImport.md
- Guía de migración de buzones: https://github.com/s1t5/mail-archiver/blob/main/doc/MailboxMigration.md
- Guía de políticas de retención: https://github.com/s1t5/mail-archiver/blob/main/doc/RetentionPolicies.md
- Guía de registro de accesos (Logs): https://github.com/s1t5/mail-archiver/blob/main/doc/Logs.md
- Guía de backup y restauración: https://github.com/s1t5/mail-archiver/blob/main/doc/BackupRestore.md
- Guía de configuración general (Setup.md): https://github.com/s1t5/mail-archiver/blob/main/doc/Setup.md
- Imagen Docker en Docker Hub: https://hub.docker.com/r/s1t5/mailarchiver
- Licencia GPL-3.0: https://github.com/s1t5/mail-archiver/blob/main/LICENSE
Apoya el canal GENBYTE
¿Te ha sido útil este contenido?
Suscríbete a YouTube
Newsletter GENBYTE
Ko-fi
Contacto: [email protected]
