Mail-Archiver: Archivado, búsqueda y exportación de correos multi-cuenta

Publicado por


mail-archiver
Open Source

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.

Archivado multi-cuenta con sincronización IMAP, Microsoft 365 y cuentas personales de Microsoft, exportación en mbox/EML, API REST y MCP, políticas de retención y bloqueo de eliminación para cumplimiento.

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.

version: '3.8'

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.

docker compose up -d

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.

volumes:
– /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.

DeletionPolicy__DeletionAllowed=false

Gestión y mantenimiento

Actualización de la imagen

Descargar la imagen más reciente y reiniciar los contenedores para aplicar actualizaciones.

docker compose pull
docker compose up -d

Reinicio de servicios

Reiniciar los contenedores sin recrearlos para aplicar cambios de configuración en variables de entorno.

docker compose restart

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.

docker exec -t postgres pg_dump -U mailuser MailArchiver > backup_$(date +%F).sql

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.

docker compose logs -f mailarchive-app
# 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

Apoya el canal GENBYTE

Sígueme en mis redes sociales

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *