feat: implement real IMAP message parsing with native CouchDB attachments

- Replace placeholder message generation with actual IMAP message fetching using go-message library
- Add per-account CouchDB databases for better organization and isolation
- Implement native CouchDB attachment storage with proper revision management
- Add command line argument parsing with --max-messages flag for controlling message processing limits
- Support both sync and archive modes with proper document synchronization
- Add comprehensive test environment with Podman containers (GreenMail IMAP server + CouchDB)
- Implement full MIME multipart parsing for proper body and attachment extraction
- Add TLS and plain IMAP connection support based on port configuration
- Update configuration system to support sync vs archive modes
- Create test scripts and sample data for development and testing

Key technical improvements:
- Real email envelope and header processing with go-imap v2 API
- MIME Content-Type and Content-Disposition parsing for attachment detection
- CouchDB document ID generation using mailbox_uid format for uniqueness
- Duplicate detection and prevention to avoid re-storing existing messages
- Proper error handling and connection management for IMAP operations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ole-Morten Duesund 2025-08-01 17:04:10 +02:00
commit ea6235b674
22 changed files with 1262 additions and 66 deletions

38
test/podman-compose.yml Normal file
View file

@ -0,0 +1,38 @@
version: '3.8'
services:
# CouchDB for testing
couchdb:
image: docker.io/couchdb:3.3
container_name: mail2couch_test_couchdb
environment:
- COUCHDB_USER=admin
- COUCHDB_PASSWORD=password
ports:
- "5984:5984"
volumes:
- couchdb_data:/opt/couchdb/data
networks:
- mail2couch_test
# GreenMail IMAP server for testing
greenmail:
image: docker.io/greenmail/standalone:2.0.1
container_name: mail2couch_test_imap
ports:
- "3143:3143" # IMAP
- "3993:3993" # IMAPS
- "3025:3025" # SMTP
environment:
- GREENMAIL_OPTS=-Dgreenmail.setup.test.all -Dgreenmail.hostname=0.0.0.0 -Dgreenmail.users=testuser1:password123@localhost,testuser2:password456@localhost,syncuser:syncpass@localhost,archiveuser:archivepass@localhost
networks:
- mail2couch_test
depends_on:
- couchdb
volumes:
couchdb_data:
networks:
mail2couch_test:
driver: bridge