Python 电子邮件消息未在 Outlook 中线程化。可能的标题问题?自定义格式或行长度是可能的解决方案吗?

问题描述 投票:0回答:1

来自 @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]>'

也许如果有人知道如何强制标头采用这种格式,那么就足以作为解决方法。

任何帮助将不胜感激:)

python outlook email-headers
1个回答
0
投票

我在使用 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)
)
© www.soinside.com 2019 - 2024. All rights reserved.