How does a Gmail message Id or ThreadId map to the new Gmail UI?

不想你离开。 提交于 2019-11-28 19:39:29

I've been encountering the same problem and have had some success in this problem, as well as some issues I still can't get past.

Good news: The new compose parameter format is some kind of "base40" encoding. I searched the Gmail source for a restricted alphabet string, and found and deobfuscated the bit of code doing this encoding/decoding: https://gist.github.com/danrouse/52212f0de2fbfe33cfc56583f20ccb74

This code includes an encode and decode function which should work for Gmail-format query parameters.

Bad news: The values that it is encoding to open draft emails do not appear to be available using the Gmail API. Specifically, they look like this: thread-f:NEW_THREAD_ID+msg-a:DRAFT_ID -- while the draft ID is the same as it was before, the Thread ID does not appear to match any of the IDs that the Gmail API returns.

Interestingly, if you inspect the subject row in the Gmail UI, it has dataset attributes including all of both the old format and new format IDs - but it's still unclear how to get the new ones programatically.

Building on @kremonte gist, and @chris-wood comments, I made a rails gem that correctly creates the open-the-draft-inside-gmail URL.

It's here - https://github.com/GoodMeasuresLLC/gmail_compose_encoder

It's for the use case of "my code created a draft (prepopulated with some text, of course) and now I want to open the draft in compose mode so that my user can review it before hitting "send".

Thanks to @frank-szilinski - he pointed out that the old format is now translated. I.e. this now works again:

https://mail.google.com/mail/ca/u/1/#drafts/1661237c4db71ace

It doesn't seem to work when the Gmail tab isn't already open, however.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!