From 5c4a3b05ae6cbfeb5b8f92689394920cc9ad3dc4 Mon Sep 17 00:00:00 2001 From: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com> Date: Fri, 2 Oct 2026 14:21:55 -0400 Subject: [PATCH] Surface failed or missing IMAP message fetches before parsing Signed-off-by: Rudy Celekli <47457359+rudycelekli@users.noreply.github.com> --- engineering/engineering-email-intelligence-engineer.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/engineering/engineering-email-intelligence-engineer.md b/engineering/engineering-email-intelligence-engineer.md index b9390ef2..1a1dce9f 100644 --- a/engineering/engineering-email-intelligence-engineer.md +++ b/engineering/engineering-email-intelligence-engineer.md @@ -99,8 +99,14 @@ def fetch_thread(imap_conn, thread_ids): """Fetch and parse raw messages, preserving full MIME structure.""" messages = [] for msg_id in thread_ids: - _, data = imap_conn.fetch(msg_id, "(RFC822)") - raw = data[0][1] + status, data = imap_conn.fetch(msg_id, "(RFC822)") + if status != 'OK': + raise RuntimeError(f'IMAP fetch failed for message {msg_id}: {status}') + raw = next((item[1] for item in data or [] + if isinstance(item, tuple) and len(item) == 2 + and isinstance(item[1], bytes)), None) + if raw is None: + raise RuntimeError(f'IMAP returned no RFC822 body for message {msg_id}') parsed = email.message_from_bytes(raw, policy=policy.default) messages.append({ "message_id": parsed["Message-ID"],