Use SMTP port 25 instead of 587 for internal Postfix
Postfix only listens on port 25 inside the cluster. Port 587 (submission) is not enabled in the container.
Add GET endpoint for message labels
GET **************** returns label IDs applied to a specific message.
Add bulk index endpoint to backfill conversations from IMAP
POST **************** indexes existing IMAP messages into conversations and search index tables.
Change ddl-auto from none to update for auto schema management
Hibernate was not creating the email_metadata schema and conversations table because ddl-auto was set to none in the k8s configmap.
Migrate JPA entities and repos to kamo-shared-library
Entities and repositories moved to **************** in the shared library. All imports updated to reference shared lib.
Use native query for PostgreSQL text[] column in ConversationRepository
MEMBER OF is not supported by Hibernate for @JdbcTypeCode(ARRAY) fields. Switch to native SQL with ANY() for folder_ids array lookup.
Add IMAP connection pool, search intelligence, and delta sync endpoints
- Add Apache Commons Pool2 keyed connection pool for IMAP Store reuse (3/account, 500 total, 10min idle eviction) - Migrate EmailImapService from ConcurrentHash...
Add enterprise email metadata services — labels, filters, smart folders, batch ops
Plans 1-3: metadata schema, JPA entities, repositories, conversation threading, label CRUD, filter rule engine with async retroactive apply, smart folder criter...
Use StringRedisTemplate to read OTK/session values stored as plain strings
The Next.js app stores OTK and *** values as plain strings in Redis. The default RedisTemplate uses JSON serializer which fails to parse them.
Add missing jakarta.mail.event imports and catch IOException in NATS handler
Add K8s manifests (configmap, deployment, service, ingressroute, middleware)
Add EmailCredentialService with CockroachDB + MySQL lookup + Redis cache
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.