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
2.2 KiB
2.2 KiB
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 and using time-based searches.
Setup
-
Copy
.env.exampleto.envand fill in your IMAP credentials, Uptime URLs, and settings. -
Create virtual environment:
python -m venv venv -
Activate and install:
source venv/bin/activate && pip install -e . -
For user services (recommended):
- Copy services:
cp *.service *.timer ~/.config/systemd/user/ - Copy drop-in:
cp -r email_forwarder.service.d ~/.config/systemd/user/ - Edit
~/.config/systemd/user/email_forwarder.service.d/override.confto setPROJECT_DIRto your project path.
- Copy services:
-
Reload and enable:
systemctl --user daemon-reload && systemctl --user enable email_forwarder.timer && systemctl --user start email_forwarder.timer -
Check status:
systemctl --user status email_forwarder.timer
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 passwordFOLDER: Mailbox folder (default INBOX)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}.
Dependencies
- imaplib, email (built-in)
- python-dotenv, imap-tools
- systemd (for user services)
Troubleshooting
- Logs:
journalctl --user -u email_forwarder.service - Test:
source venv/bin/activate && python main.py - Timezone issues: Adjust UTC offset in script if needed.