handoff fixes
This commit is contained in:
parent
89ddebdb60
commit
8d5e9712a6
20 changed files with 1056 additions and 141 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue