diff --git a/backend/app/services/external_reply_service.py b/backend/app/services/external_reply_service.py index 1a82ea9..bd7a3ad 100644 --- a/backend/app/services/external_reply_service.py +++ b/backend/app/services/external_reply_service.py @@ -48,15 +48,29 @@ class ExternalReplyPlan: def internet_message_id_of(message: dict) -> str | None: - stored = canonical_message_id( - message.get("internet_message_id") or message.get("message_id") - ) - raw_header = (message.get("raw_headers") or {}).get("message_id") - raw_canonical = canonical_message_id(raw_header) - if raw_canonical and stored: - if folded_message_id(raw_canonical) == folded_message_id(stored): - return raw_canonical - return stored or raw_canonical + return internet_message_id_of_message(message) + + +async def resolve_internet_message_id(database, message: dict) -> str | None: + """Resolve parent Message-ID, recovering Gmail case from stored raw MIME when needed.""" + resolved = internet_message_id_of_message(message) + if resolved: + return resolved + + raw_mime = message.get("raw_mime") + if not raw_mime: + return None + + try: + raw = await get_raw_mime_storage().get(raw_mime) + parsed = parse_mime(raw) + return first_message_id(parsed.get("message_id")) + except Exception: + logger.exception( + "failed_to_resolve_message_id_from_raw_mime message_id=%s", + message.get("_id"), + ) + return None async def resolve_external_reply_parent(