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:
parent
79f19a8877
commit
ea6235b674
22 changed files with 1262 additions and 66 deletions
51
test/dovecot/entrypoint.sh
Executable file
51
test/dovecot/entrypoint.sh
Executable file
|
|
@ -0,0 +1,51 @@
|
|||
#!/bin/sh
|
||||
|
||||
# Entrypoint script for Dovecot test container
|
||||
|
||||
set -e
|
||||
|
||||
echo "Installing Dovecot..."
|
||||
apk add --no-cache dovecot dovecot-lmtpd openssl
|
||||
|
||||
echo "Setting up directories..."
|
||||
mkdir -p /var/mail
|
||||
mkdir -p /var/run/dovecot
|
||||
mkdir -p /var/log/dovecot
|
||||
|
||||
# Create dovecot user if it doesn't exist
|
||||
if ! getent passwd dovecot > /dev/null 2>&1; then
|
||||
addgroup -g 97 dovecot
|
||||
adduser -D -u 97 -G dovecot -s /sbin/nologin dovecot
|
||||
fi
|
||||
|
||||
# Set proper ownership
|
||||
chown -R dovecot:dovecot /var/mail
|
||||
chown -R dovecot:dovecot /var/run/dovecot
|
||||
chown -R root:dovecot /etc/dovecot
|
||||
chmod -R 0640 /etc/dovecot
|
||||
chmod 0644 /etc/dovecot/dovecot.conf
|
||||
|
||||
# Generate SSL certificates if they don't exist
|
||||
if [ ! -f /etc/dovecot/ssl/server.crt ] || [ ! -f /etc/dovecot/ssl/server.key ]; then
|
||||
echo "Generating SSL certificates..."
|
||||
mkdir -p /etc/dovecot/ssl
|
||||
|
||||
# Generate DH parameters (small for testing)
|
||||
openssl dhparam -out /etc/dovecot/ssl/dh.pem 1024
|
||||
|
||||
# Generate private key
|
||||
openssl genrsa -out /etc/dovecot/ssl/server.key 2048
|
||||
|
||||
# Generate certificate
|
||||
openssl req -new -key /etc/dovecot/ssl/server.key -out /etc/dovecot/ssl/server.csr -subj "/C=US/ST=Test/L=Test/O=Mail2Couch/CN=localhost"
|
||||
openssl x509 -req -days 365 -in /etc/dovecot/ssl/server.csr -signkey /etc/dovecot/ssl/server.key -out /etc/dovecot/ssl/server.crt
|
||||
rm /etc/dovecot/ssl/server.csr
|
||||
fi
|
||||
|
||||
# Ensure SSL directory permissions
|
||||
chown -R dovecot:dovecot /etc/dovecot/ssl
|
||||
chmod 600 /etc/dovecot/ssl/server.key
|
||||
chmod 644 /etc/dovecot/ssl/server.crt
|
||||
|
||||
echo "Starting Dovecot..."
|
||||
exec dovecot -F
|
||||
Loading…
Add table
Add a link
Reference in a new issue