Replace duplicate strip() calls with filter(None, generator) for
cleaner and more efficient processing of processed Message-IDs.
Changes:
- Use set(filter(None, (line.strip() for line in f))) to avoid calling
strip() twice and filter empty lines
Make all attributes private (_host, _imap, etc.) and remove redundant
public connect/disconnect methods. Connection management is now handled
internally by the orchestrator calling private _connect/_disconnect.
Changes:
- Privatize ImapClient attributes and methods
- Update EmailForwarder to call private connection methods
- Enhance encapsulation without changing functionality
Introduce class-based architecture with inheritance for IMAP clients:
- ImapClient base class with private low-level methods
- SourceImap and DestImap subclasses for specific operations
- EmailForwarder orchestrator class for coordination
- Global load_config and main functions
Improvements:
- Clear separation of concerns and encapsulation
- Private methods for internal IMAP calls
- Better error handling and logging
- Maintains all original functionality
Add support for syncing multiple IMAP folders with auto-creation of missing
dest folders and configurable folder selection.
Changes:
- Update main.py to loop over folders, with auto-create for dest
- Add FOLDERS env var for all or specific folders
- Update .env.example and README for FOLDERS config
Provide automated installation for Linux users to set up venv and systemd
services with proper path configuration.
Changes:
- Add install.sh with dependency checks, venv setup, and systemd configuration
- Update README to highlight automated install option
Provide override.conf.sample as a template for customizing systemd
environment paths.
Changes:
- Rename override.conf to override.conf.sample with placeholders and comments
- Update README to instruct copying the sample
Remove PROCESSED_FILE references and update .env.example with placeholder
Uptime URLs for privacy.
Changes:
- Remove unused processed_file variable and loading in main.py
- Update .env.example to use generic Uptime URLs
- Remove processed_uids.txt from .gitignore
Add core IMAP forwarding logic with time-based searches and Message-ID
deduplication to prevent duplicates in destination mailbox.
Changes:
- Implement SINCE-based email search using last_run.txt for incremental forwarding
- Add Message-ID extraction and IMAP checks for deduplication
- Configure systemd user services with drop-in overrides for portability
- Integrate Uptime Kuma pings for monitoring
- Set up virtual environment for dependency isolation
- Update documentation and configuration templates