Módulo FileMailer-PG #
La plataforma FileMailer — ahora a escala empresarial. Millones de correos, petabytes de adjuntos, cero duplicados, una API limpia.

Un servicio Spring Boot de nivel empresarial que sincroniza buzones IMAP con una base de datos PostgreSQL y almacena cada .eml y cada adjunto en Minio (compatible con S3) utilizando almacenamiento direccionable por contenido con deduplicación SHA-256. Una API REST completa expone cuentas, carpetas, correos, borradores, colas y operaciones de administración — lista para integrarse con FileMaker, CRM/ERP o cualquier backend que hable HTTP.
Visión general #
FileMailer-PG está diseñado para despliegues grandes y críticos donde importan el volumen del buzón, el cumplimiento del archivado, la eficiencia de almacenamiento y el tiempo de actividad. Desacopla los metadatos (PostgreSQL) de los ficheros físicos (Minio / S3), de modo que cada capa escala de forma independiente.
Cada mensaje entrante se analiza, el .eml original se conserva en Minio, los adjuntos se extraen y se almacenan por hash, y una fila rica de metadatos va a PostgreSQL — lista para búsqueda de texto completo, hilos y consumo por API.
Características principales #
Sincronización IMAP #
- Sincronización incremental basada en UID — sólo se descargan los mensajes nuevos
- Notificaciones push IMAP IDLE en tiempo real, una conexión persistente por cuenta
- Bloqueos de sincronización distribuidos que evitan sincronizaciones concurrentes de la misma cuenta desde IDLE, planificador o disparadores manuales
- Detección automática de cambios de
UIDVALIDITYque lanza una re-sincronización segura - Soporte multi-carpeta con exclusiones configurables (Junk, Spam, Trash…) y restauración automática
Almacenamiento direccionable por contenido (CAS) con deduplicación #
- Cada correo y adjunto se almacena en Minio por su hash SHA-256
- El contenido idéntico se guarda una sola vez — hasta 80% de ahorro de almacenamiento en buzones corporativos típicos
- Estructura de rutas:
{prefix}/{accountId}/{hash[0:2]}/{hash[2:4]}/{hash} - Versionado del bucket activado para archivado inmutable y retención
- Subida en streaming para adjuntos grandes — seguro en memoria para ficheros de varios GB
Capa de metadatos PostgreSQL #
- Esquema relacional completo: cuentas, carpetas, correos, adjuntos, ficheros almacenados, API keys
- Búsqueda de texto completo sobre asunto y cuerpo
- Hilos de correo vía
In-Reply-ToyReferences - Borrado lógico (
isDeleted,deletedAt) para recuperación conforme al RGPD, con barrido opcional de borrado físico - Migraciones gestionadas por Flyway, pool de conexiones HikariCP
Envío SMTP y cola #
- Envío asíncrono mediante un
ThreadPoolExecutordedicado (cola@Async) - Reintentos con backoff exponencial para fallos SMTP transitorios
- IDs de seguimiento por envío — los clientes consultan el estado sin bloquearse en SMTP
- Creación y edición de borradores, gestión de adjuntos, responder y reenviar
- Múltiples configuraciones SMTP por cuenta (SSL 465 / STARTTLS 587)
- Apagado ordenado que espera los envíos en curso
API REST potente #
- Totalmente documentada con Swagger UI y OpenAPI 3
- Autenticación sin estado mediante cabecera
X-API-Key— sin sesiones, sin cookies - Endpoints para cuentas, carpetas, correos, adjuntos, borradores, cola, administración y autenticación
- Inyección de cabeceras personalizadas para flujos de integración con FileMaker / CRM
- Endpoints de re-parseo que reconstruyen los metadatos a partir del
.emloriginal guardado en Minio
Seguridad #
- Credenciales IMAP / SMTP cifradas con AES-GCM antes de persistirse — las contraseñas en claro nunca se escriben
ApiKeyAuthenticationFiltervalida cada petición y actualizalastUsedAt- Spring Security configurado para REST sin estado
- Configuración CORS lista para clientes de navegador
Escalabilidad y operación #
- Escalado horizontal: añade réplicas de PostgreSQL y nodos de Minio de forma independiente
- Escalado vertical: Java 17~21, Spring Boot 3.4, HikariCP y pools de ejecutores afinados
- Cuentas de correo ilimitadas — sin licencias por cuenta, sin topes artificiales
- Endpoints de salud y métricas listos para stacks de monitorización
- Incluye plist de
launchdpara macOS para ejecutarse como servicio en segundo plano
Casos de uso #
- Archivado de correo corporativo y cumplimiento — cada mensaje preservado, inmutable, deduplicado
- Back-office FileMaker de misión crítica — integra con FileMaker vía API REST con escala de buzón ilimitada
- Integración con CRM / ERP — adjunta el historial de comunicación con clientes mediante una API HTTP limpia
- Gestión del ciclo de vida de documentos — deduplicación de adjuntos en toda la organización
- Retención a largo plazo — el versionado de Minio mantiene copias históricas a salvo de sobrescrituras
Especificaciones técnicas #
Stack #
- Java 17
- Spring Boot 3.4.x
- PostgreSQL (almacén principal de metadatos)
- Minio / cualquier almacenamiento compatible con S3 (ficheros físicos)
- Jakarta Mail (Eclipse Angus) para IMAP / SMTP
- Spring Security, Spring Data JPA, HikariCP
- Flyway para migraciones de base de datos
- SpringDoc OpenAPI + Swagger UI
Requisitos #
- Runtime Java 17
- Servidor PostgreSQL
- Minio (o cualquier endpoint compatible con S3) con versionado activado
- Acceso de red a los servidores IMAP y SMTP
- 1 GB de RAM mínimo (2 GB+ recomendado para buzones grandes)
Despliegue #
Se distribuye como un JAR ejecutable de Spring Boot con application.yml externo. Se incluye un plist launchd para macOS para ejecutarlo como servicio en segundo plano. El mismo JAR escala desde una VM de un solo nodo hasta un despliegue Kubernetes multi-réplica respaldado por PostgreSQL HA y un pool Minio clusterizado.