diff --git a/tools/gmail.py b/tools/gmail.py index f299f52..756e791 100644 --- a/tools/gmail.py +++ b/tools/gmail.py @@ -5,7 +5,7 @@ import re import smtplib from email import message_from_bytes -from email.header import decode_header as _decode_hdr +from email.header import decode_header as _decode_hdr, Header as _Header from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText @@ -157,6 +157,15 @@ return False +def _enc_header(value: str) -> "_Header | str": + """Encode header value as RFC 2047 if it contains non-ASCII characters.""" + try: + value.encode("ascii") + return value + except UnicodeEncodeError: + return _Header(value, "utf-8") + + def _build_mime( to: str, subject: str, body_html: str, in_reply_to: str = "", references: str = "", @@ -166,8 +175,8 @@ h.body_width = 0 body_plain = h.handle(body_html) msg = MIMEMultipart("alternative") - msg["To"] = to - msg["Subject"] = subject + msg["To"] = _enc_header(to) + msg["Subject"] = _enc_header(subject) if in_reply_to: msg["In-Reply-To"] = in_reply_to if references: msg["References"] = references msg.attach(MIMEText(body_plain, "plain", "utf-8"))