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.
Find a file
Jeena c96bd8ed71 Restructure as runnable Python module
Convert email_forwarder.py to a package with __main__.py for module execution.
Update systemd service to use -m email_forwarder.
Configure pyproject.toml to exclude state/ from packaging.

Changes:
- Create email_forwarder/ package with __init__.py and __main__.py
- Move main script to email_forwarder/email_forwarder.py
- Update ExecStart to python -m email_forwarder
- Add setuptools config to exclude state/ directory
2026-01-04 18:22:42 +09:00
email_forwarder Restructure as runnable Python module 2026-01-04 18:22:42 +09:00
email_forwarder.service.d Add sample drop-in config 2026-01-04 16:15:04 +09:00
.env.example Update default FOLDERS to include Sent 2026-01-04 17:55:19 +09:00
.gitignore Fix install script and update .gitignore 2026-01-04 17:46:16 +09:00
AGENTS.md Add AGENTS.md with project guidelines 2026-01-04 17:19:58 +09:00
email_forwarder-fail-notify.service Implement email forwarder 2026-01-04 15:34:31 +09:00
email_forwarder.service Restructure as runnable Python module 2026-01-04 18:22:42 +09:00
email_forwarder.timer Implement email forwarder 2026-01-04 15:34:31 +09:00
install.sh Remove unused ENV_FILE from install script 2026-01-04 17:47:30 +09:00
last_run.txt Fix install script and update .gitignore 2026-01-04 17:46:16 +09:00
processed_message_ids.txt Fix install script and update .gitignore 2026-01-04 17:46:16 +09:00
pyproject.toml Restructure as runnable Python module 2026-01-04 18:22:42 +09:00
README.md Restructure as runnable Python module 2026-01-04 18:22:42 +09:00

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/username
  • SOURCE_PASS: Source password
  • DEST_HOST: Destination IMAP server (e.g., yourserver.mxrouting.net)
  • DEST_PORT: Port (default 993)
  • DEST_USER: Destination email/username
  • DEST_PASS: Destination password
  • FOLDERS: Folders to sync (default "INBOX,Sent"; use "all" for all folders or comma-separated list)
  • DRY_RUN: Set to true for testing without forwarding (default false)
  • UPTIME_SUCCESS_URL: URL for success ping
  • UPTIME_FAIL_URL: URL for failure ping

How It Works

  • Uses time-based search (SINCE) with last_run.txt to find emails since last run.
  • Extracts Message-ID, checks against local file and destination IMAP for duplicates.
  • Forwards via IMAP APPEND; updates last_run.txt on success.
  • Logs activity; systemd handles Uptime Kuma pings.

Monitoring with Uptime Kuma

  • Success: Pings ${UPTIME_SUCCESS_URL} after forwarding.
  • Failure: OnFailure pings ${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.