From 136db559056971b0d0099dc8c392d4425f09e9c3 Mon Sep 17 00:00:00 2001 From: Jeena Date: Fri, 5 Jun 2026 22:38:10 +0000 Subject: [PATCH] Fix silent failures and false success pings - Collapse folded Message-ID headers before IMAP SEARCH; embedded CRLF was breaking the command and crashing every run - Set Type=oneshot so the success ping only fires on clean exit instead of on every spawn, letting OnFailure report real failures Co-Authored-By: Claude Opus 4.8 (1M context) --- email_forwarder.service | 1 + email_forwarder/email_forwarder.py | 3 +++ 2 files changed, 4 insertions(+) diff --git a/email_forwarder.service b/email_forwarder.service index ef609dd..cdf2ee2 100644 --- a/email_forwarder.service +++ b/email_forwarder.service @@ -3,6 +3,7 @@ Description=Email Forwarder OnFailure=email_forwarder-fail-notify.service [Service] +Type=oneshot WorkingDirectory=${PROJECT_DIR} ExecStart=${PROJECT_DIR}/venv/bin/python -m email_forwarder EnvironmentFile=${PROJECT_DIR}/.env diff --git a/email_forwarder/email_forwarder.py b/email_forwarder/email_forwarder.py index 9191fdd..2c37654 100644 --- a/email_forwarder/email_forwarder.py +++ b/email_forwarder/email_forwarder.py @@ -197,6 +197,9 @@ class EmailForwarder: msg_id = msg.get("Message-ID") if not msg_id: continue + # Collapse folded headers (embedded CRLF/whitespace) so the + # Message-ID is safe to embed in an IMAP SEARCH command. + msg_id = "".join(msg_id.split()) if msg_id in self.processed_ids: continue self.dest.ensure_folder_exists(folder)