【问题标题】:Gmail API retrieving Message ID after sending/insert call发送/插入调用后 Gmail API 检索消息 ID
【发布时间】:2020-07-03 05:53:12
【问题描述】:

有没有办法在通过 API 的响应插入消息后获取消息 ID?

例如,我使用以下代码插入初始消息:

try:
    message1 = service.users().messages().insert(userId='me', body=temp).execute()
    print(f"{message1['id']} / {message1['threadId']}")

在此 API 调用中,idthreadId 是相同的,都是 16 个字符的字符串。

接下来,我插入回复。我进入 Gmail 以获取邮件 ID (<...@mail.gmail.com>),并在下一个 API 调用中进行如下设置:

message['subject'] = 'Re: test subject'
message['In-Reply-To'] = '<...@mail.gmail.com>'
message['References'] = '<...@mail.gmail.com>'
encoded_message = urlsafe_b64encode(message.as_bytes())
temp = {'raw': encoded_message.decode(), 'labelIds': ['UNREAD'], 'threadId': 'THREAD_ID_FROM_FIRST_CALL'}
try:
    message1 = service.users().messages().insert(userId='me', body=temp).execute()
    print(f"{message1['id']} / {message1['threadId']}")

这里的响应与上面的 message1['id'] 不同,但 message1['threadId'] 相同,因此它在 Gmail 中显示正确。但是,有没有一种方法可以轻松地从响应正文中获取消息 ID?我可以从message1['id'] 生成它吗?另一种方法是创建第二个 API 来查找message1['id'] 的消息,但我试图避免这种情况。谢谢。

【问题讨论】:

  • 我无法理解get Message ID from the response body。可以问一下具体情况吗?

标签: python gmail gmail-api google-api-js-client


【解决方案1】:

很遗憾,除了进行新的 API 调用之外,没有直接的方法来检索新的 messageId

这是因为messageIdthreadId 是两个不同的参数:

  • messageId对应线程中的消息

  • threadId对应线程

因此,如果您在线程中插入新回复,threadId 显然与原始消息相关联的回复相同,但新回复将收到一个新 id - messageId,它是唯一且与与之关联的threadId 无关。

您可以做的是将所有线程按threadIds 分组,并在此基础上插入新回复。这样,您还可以轻松地从该特定线程收集messageIds。

参考

【讨论】:

  • 谢谢。在插入调用后,我仔细查看了完整的响应正文,也没有任何内容。所以我假设messageId 是唯一的,插入消息后,我在messageId 上执行messages.get,我刚刚得到并从响应中提取Message-Id
猜你喜欢
  • 2016-05-29
  • 2017-03-03
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 2020-07-12
  • 2017-12-09
  • 2015-07-10
  • 2015-01-22
相关资源
最近更新 更多