handoff fixes

This commit is contained in:
debu-2 2026-10-06 02:44:54 +05:30
parent 6c52cd19cb
commit 89ddebdb60
15 changed files with 991 additions and 271 deletions

View file

@ -32,8 +32,8 @@ from app.services.thread_service import (
create_thread,
ensure_thread_for_message,
message_event_at,
threading_fields_from_parent,
)
from app.services.external_reply_service import build_external_reply_plan, log_smtp_message_sending
from app.services.mailbox_scope import apply_external_scope
from app.services.thread_resolver import ThreadResolution
@ -150,7 +150,6 @@ async def create_email(
detail="Reply target not found.",
)
thread_id = parent_entry.get("thread_id")
threading_fields = threading_fields_from_parent(parent_message)
to_addresses, cc_addresses = reply_recipients(
message=parent_message,
viewer_email=sender,
@ -187,9 +186,20 @@ async def create_email(
created_at = utc_now()
subject = payload.subject
if parent_message and not subject.strip():
parent_subject = parent_message.get("subject", "")
subject = parent_subject if parent_subject.lower().startswith("re:") else f"Re: {parent_subject}"
if parent_message:
reply_plan = build_external_reply_plan(
parent_external_message=parent_message,
body_text=payload.body_text,
body_html=payload.body_html,
recipients=recipients,
)
threading_fields = {
"in_reply_to": reply_plan.threading.in_reply_to,
"references": reply_plan.threading.references,
"parent_message_id": reply_plan.threading.parent_internal_message_id,
}
if not subject.strip():
subject = reply_plan.subject
document = {
"direction": "outbound",
"message_scope": MESSAGE_SCOPE_EXTERNAL,
@ -215,6 +225,17 @@ async def create_email(
}
try:
log_smtp_message_sending(
generated_message_id=None,
in_reply_to=threading_fields.get("in_reply_to"),
references=threading_fields.get("references"),
sender=sender,
recipients=recipients,
subject=document["subject"],
external_thread_id=thread_id,
replying_to_internal_message_id=threading_fields.get("parent_message_id"),
replying_to_internet_message_id=threading_fields.get("in_reply_to"),
)
internet_message_id = await deliver_email(
sender=sender,
recipients=recipients,
@ -228,7 +249,20 @@ async def create_email(
references=threading_fields.get("references"),
)
document["status"] = "accepted"
document["message_id"] = normalize_message_id(internet_message_id)
normalized_id = normalize_message_id(internet_message_id)
document["message_id"] = normalized_id
document["internet_message_id"] = normalized_id
log_smtp_message_sending(
generated_message_id=normalized_id,
in_reply_to=threading_fields.get("in_reply_to"),
references=threading_fields.get("references"),
sender=sender,
recipients=recipients,
subject=document["subject"],
external_thread_id=thread_id,
replying_to_internal_message_id=threading_fields.get("parent_message_id"),
replying_to_internet_message_id=threading_fields.get("in_reply_to"),
)
except Exception as error:
document["status"] = "failed"
document["error"] = str(error)