使用 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 的值放在引用和回复标头中。@ziganotschka14fd1c555a1352b7
与 14fd1c52911f0f64
不同,它是您可以使用 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 线程化电子邮件 [在新线程化要求之后]的主要内容,如果未能解决你的问题,请参考以下文章
ssl.SSLError: [SSL: WRONG_VERSION_NUMBER] 线程化时的 Gmail
如何在 Gmail 中使用标签来识别单个邮件,而不是已由脚本处理的线程
Gmail现在支持安排电子邮件,如何使用gmail rest api工作,还是api支持此功能?