handoff fixes

This commit is contained in:
debu-2 2026-10-06 03:14:53 +05:30
parent 89ddebdb60
commit 8d5e9712a6
20 changed files with 1056 additions and 141 deletions

View file

@ -1,5 +1,7 @@
import email.policy
import email.utils
import logging
from email.parser import BytesParser
from email.message import EmailMessage, Message
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
@ -13,6 +15,20 @@ from app.models import MailDomain
from app.services.mime_body_extractor import ExtractedMimePart
SMTP_POLICY = email.policy.SMTP.clone(max_line_length=998)
logger = logging.getLogger(__name__)
def log_outbound_mime_headers(message: Message) -> None:
logger.info(
"smtp_outbound_mime_headers message_id=%s in_reply_to=%s references=%s "
"from=%s to=%s subject=%s",
message.get("Message-ID"),
message.get("In-Reply-To"),
message.get("References"),
message.get("From"),
message.get("To"),
message.get("Subject"),
)
def _mime_attachment(part: ExtractedMimePart) -> MIMEBase:
@ -60,7 +76,9 @@ def build_message(
root["Message-ID"] = generated_id
if in_reply_to:
root["In-Reply-To"] = in_reply_to
if references:
refs = references or [in_reply_to]
root["References"] = " ".join(refs)
elif references:
root["References"] = " ".join(references)
alternative = MIMEMultipart("alternative", policy=SMTP_POLICY)
@ -94,7 +112,9 @@ def build_message(
message["Message-ID"] = generated_id
if in_reply_to:
message["In-Reply-To"] = in_reply_to
if references:
refs = references or [in_reply_to]
message["References"] = " ".join(refs)
elif references:
message["References"] = " ".join(references)
message.set_content(body_text)
if body_html:
@ -115,6 +135,10 @@ def sign_message(message: Message, domain: MailDomain) -> bytes:
]
if message.get("Cc"):
signed_headers.insert(3, b"cc")
if message.get("In-Reply-To"):
signed_headers.append(b"in-reply-to")
if message.get("References"):
signed_headers.append(b"references")
signature = dkim.sign(
raw_message,
domain.dkim_selector.encode(),
@ -180,7 +204,9 @@ async def deliver_email(
inline_parts=inline_parts,
file_attachments=file_attachments,
)
log_outbound_mime_headers(message)
signed = sign_message(message, domain)
log_signed_mime_headers(signed)
await send_via_smtp(
signed,
sender=sender,