handoff fixes
This commit is contained in:
parent
6c52cd19cb
commit
89ddebdb60
15 changed files with 991 additions and 271 deletions
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue