Gmail API 正在 sending/insert 调用后检索邮件 ID
Gmail API retrieving Message ID after sending/insert call
在通过 API 的响应插入消息后,有没有办法获取消息 ID?
例如,我使用以下代码插入初始消息:
try:
message1 = service.users().messages().insert(userId='me', body=temp).execute()
print(f"{message1['id']} / {message1['threadId']}")
在这个API调用中,id
和threadId
是一样的,都是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']
的消息,但我试图避免这种情况。谢谢。
不幸的是,除了进行新的 API 调用外,没有直接的方法来检索新的 messageId
。
这是因为messageId
和threadId
是两个不同的参数:
messageId
对应线程中的消息
threadId
对应线程
因此,如果您在线程中插入一个新回复,threadId
显然与原始消息关联的回复相同,但新回复将收到一个新 ID - a messageId
这是唯一的,与与之关联的 threadId
无关。
您可以改为按 threadId
对所有线程进行分组,并在此基础上插入新回复。这样,您还可以轻松地从该特定线程收集 messageId
。
参考
在通过 API 的响应插入消息后,有没有办法获取消息 ID?
例如,我使用以下代码插入初始消息:
try:
message1 = service.users().messages().insert(userId='me', body=temp).execute()
print(f"{message1['id']} / {message1['threadId']}")
在这个API调用中,id
和threadId
是一样的,都是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']
的消息,但我试图避免这种情况。谢谢。
不幸的是,除了进行新的 API 调用外,没有直接的方法来检索新的 messageId
。
这是因为messageId
和threadId
是两个不同的参数:
messageId
对应线程中的消息threadId
对应线程
因此,如果您在线程中插入一个新回复,threadId
显然与原始消息关联的回复相同,但新回复将收到一个新 ID - a messageId
这是唯一的,与与之关联的 threadId
无关。
您可以改为按 threadId
对所有线程进行分组,并在此基础上插入新回复。这样,您还可以轻松地从该特定线程收集 messageId
。
参考