来自 @outlook.com 地址的电子邮件带有以下标头
Message-ID:
<DM5PR1101MB2074A897F300[email protected]>
为了使用 Python 进行响应,我将该消息标识符放在
In-Reply-To
标头中
from email.message import EmailMessage
msg = EmailMessage()
msg['In-Reply-To'] = '<DM5PR1101MB2074A897F300D[email protected]>'
但是,当我打印此消息时,标题显示如下:
In-Reply-To: =?utf-8?q?=3CDM5PR1101MB2074A897F300D11D32C71B75EC049=40DM5PR11?=
=?utf-8?q?01MB2074=2Enamprd11=2Eprod=2Eoutlook=2Ecom=3E?=
当它到达 Outlook 时,它不会被放入与原始邮件相同的对话线程中。
有人知道为什么会发生这种情况和/或知道任何解决方法吗?
我怀疑发生这种情况是因为 Python 试图将标头拆分为多行,因为该标头高于 RFC 指定的行长度,并且当它拆分为多行时,它以
'?utf-8?q
开头并转换 <
字符到 ?=3C
等...而 Outlook 期望标头的格式为
In-Reply-To':
<DM5PR1101MB2074A897F300D[email protected]>'
也许如果有人知道如何强制标头采用这种格式,那么就足以作为解决方法。
任何帮助将不胜感激:)
我在使用 protonmail 时遇到了这个问题
可以通过在policy中指定max_header_length来解决
https://docs.python.org/3/library/email.policy.html#email.policy.Policy.max_line_length
from email.message import EmailMessage
from email.policy import EmailPolicy
EmailMessage(
policy=EmailPolicy(max_line_length=None)
)