Gmail API получает идентификатор сообщения после отправки / вставки вызова - PullRequest
0 голосов
/ 22 марта 2020

Есть ли способ получить идентификатор сообщения после вставки сообщения через ответ API?

Например, я использую приведенный ниже код для вставки исходного сообщения:

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

В этом вызове API id и threadId одинаковы, строка из 16 символов.

Затем я вставляю ответ. Я go в Gmail, чтобы получить идентификатор сообщения (<...@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. Но есть ли способ легко получить идентификатор сообщения из тела ответа? Могу ли я сгенерировать его из message1['id']? Альтернативой является создание второго API для поиска сообщения по message1['id'], но я пытаюсь избежать этого. Благодаря.

1 Ответ

0 голосов
/ 23 марта 2020

К сожалению, нет прямого способа получить новый messageId, кроме нового вызова API.

Это связано с тем, что messageId и threadId - это два разных параметра:

  • messageId соответствует сообщению в теме

  • threadId соответствует теме

Таким образом, если вы вставите новый ответ в цепочку, threadId, очевидно, будет таким же, как тот, который связан с исходным сообщением, но новый ответ получит новый идентификатор - messageId, который является уникальным и не имеет ничего общего с threadId, связанным с ним.

Вместо этого вы можете сгруппировать все потоки по их threadId и на основе что, вставьте новый ответ. Таким образом, вы также можете легко собрать messageId с из указанного потока c.

Ссылка

...