Email Forwarder is a Python-based tool that automates email synchronization between IMAP accounts (e.g., GMX to MXRoute). It forwards new emails, prevents duplicates using Message-ID tracking, supports multi-folder sync, and integrates with systemd for scheduled runs and Uptime Kuma monitoring.
Remove local exception handling for IMAP operations to ensure script exits on any server failure (e.g., auth, connection, search errors). This allows systemd OnFailure to notify on fixable issues. Changes: - Remove try-except in check_duplicate, sync_folder, sync_all_folders - Let IMAP exceptions propagate to main() for exit(1) |
||
|---|---|---|
| email_forwarder | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| email_forwarder-fail-notify.service | ||
| email_forwarder.service | ||
| email_forwarder.timer | ||
| install.sh | ||
| pyproject.toml | ||
| README.md | ||
Email Forwarder
This script forwards new emails from a source IMAP account (e.g., GMX) to a destination IMAP account (e.g., MXRoute), avoiding duplicates by tracking Message-IDs.
Setup
Run the install script: ./install.sh
This will set up the virtual environment, systemd services, and provide post-install instructions.
Configuration (.env)
SOURCE_HOST: Source IMAP server (e.g., imap.gmx.com)SOURCE_PORT: Port (default 993)SOURCE_USER: Source email/usernameSOURCE_PASS: Source passwordDEST_HOST: Destination IMAP server (e.g., yourserver.mxrouting.net)DEST_PORT: Port (default 993)DEST_USER: Destination email/usernameDEST_PASS: Destination passwordFOLDERS: Folders to sync (default "INBOX,Sent"; use "all" for all folders or comma-separated list)STATE_DIR: Directory for state files (default "./state")DRY_RUN: Set totruefor testing without forwarding (default false)UPTIME_SUCCESS_URL: URL for success pingUPTIME_FAIL_URL: URL for failure ping
How It Works
- Uses time-based search (
SINCE) withlast_run.txtto find emails since last run. - Extracts Message-ID, checks against local file and destination IMAP for duplicates.
- Forwards via IMAP APPEND; updates
last_run.txton success. - Logs activity; systemd handles Uptime Kuma pings.
Monitoring with Uptime Kuma
- Success: Pings
${UPTIME_SUCCESS_URL}after forwarding. - Failure:
OnFailurepings${UPTIME_FAIL_URL}.
Troubleshooting
- Logs:
journalctl --user -u email_forwarder.service - Test:
source venv/bin/activate && python -m email_forwarder - Timezone issues: Adjust UTC offset in script if needed.