使用 Gmail Api 线程化电子邮件 [在新线程化要求之后]

Posted

技术标签:

【中文标题】使用 Gmail Api 线程化电子邮件 [在新线程化要求之后]【英文标题】:Threading Email Messages with Gmail Api [After New Threading Requirements] 【发布时间】:2020-01-07 14:19:09 【问题描述】:

我正在使用原始(base64 编码)和 threadID 字段值创建消息对象。通过使用有效的 threadId(现有电子邮件),我能够在用户收件箱中创建一个 Threaded Message。

在 2019 年 4 月 google 更改“线程更改”后,邮件不再线程。相反,它们显示为单独的消息,尽管两条消息的 ThreadID 相同。

Google 建议在现有电子邮件中添加值为“Message-Id”的“References”和“In-Reply-To”标头。问题是,每当我们使用 gmail api 发送新电子邮件时,我们只会收到截回的消息,其中只有 ThreadID 和 Label 值。要检索此已发送电子邮件的“消息 ID”,需要进行另一个 GET API 调用。这给系统增加了额外的负载,并且不必要地使系统变得复杂。

我的问题:

    还有其他方法可以使用 Gmail-API 线程消息吗?

    我们可以在不进行其他 API 调用的情况下检索 Message-ID 吗?

    我们是否可以使用任何其他标头/自定义标头来建立消息之间的关系以供线程使用。

【问题讨论】:

【参考方案1】:

当您使用 Gmail API 发送电子邮件时,响应包含邮件 ID,您可以使用 Users.messages: send Try this API 进行确认,因此无需再次调用 API。

【讨论】:

id 中包含的值与 ThreadId 相同,而不是 Message_ID。这是一个这样的响应示例 "id": "14fd1c555a1352b7", "threadId": "14fd1c52911f0f64", "labelIds": [“已发送”、“收件箱”、“重要”、“未读”]。如您所见,它只是一个线程 ID 而不是消息 ID。线程策略要求您必须将 Message-ID 的值放在引用和回复标头中。@ziganotschka 14fd1c555a1352b714fd1c52911f0f64 不同,它是您可以使用 Gmail API 检索邮件的邮件 ID。但是我明白了,您的意思是标题中包含的 ID,需要附加到“In-Reply-To”。必须通过 GET 请求检索此数据,如下所述:***.com/a/32591614/11599789 但是,文档中的信息有些混乱。它说“必须按照 RFC 2822 标准设置 References 和 In-Reply-To 标头” - 如果提供的话。但是,如果您不提供此信息,而只提供 threadId - 消息仍将被正确线程化。 是的,过去的电子邮件仅通过在消息对象中传递线程 ID 来进行线程化,但是在 Google 在 2019 年 4 月引入新的线程更改之后,同样的工作已经停止。现在根据 Google 政策,它需要添加 In-Reply-To 和 References Header 我没有在 Java 中尝试过,但是使用 Try this API 它仍然只适用于线程 ID

以上是关于使用 Gmail Api 线程化电子邮件 [在新线程化要求之后]的主要内容,如果未能解决你的问题,请参考以下文章

Gmail REST API 线程搜索未给出预期结果

ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] 线程化时的 Gmail

如何在 Gmail 中使用标签来识别单个邮件,而不是已由脚本处理的线程

Gmail现在支持安排电子邮件,如何使用gmail rest api工作,还是api支持此功能?

在 golang 中使用 gmail API 发送带附件的电子邮件

使用 Gmail API 阅读其他用户的电子邮件