How does a Gmail message Id or ThreadId map to the

2019-02-03 16:40发布

问题:

Edit: addressing the first comment below and for clarity, this isn't a code question. The question is simply:

What do I put into the URI querystring of the new Gmail UI to view a draft message created by the Gmail API?

Despite this not really being a code question, I'm asking on Stack Overflow as it's Google's preferred platform for Gmail API questions.

--

If I view a draft message in the new Gmail UI, the URI is something like this:

https://mail.google.com/mail/u/1/?zx=iij9apqgzdf4#drafts?compose=jrjtXSqXwlFGnSGCQgDCdnHGVFdlpFMgzsCNgpQstQLxdLCMkjKstBmWZkCmjhWTQnpsZCJF

I can't see any way to create such a link from the Id or ThreadId of a message created via the Gmail API.

Previously, one could do this:

https://mail.google.com/mail/u/1/?zx=ov61dxfbrcga#drafts?compose=1631caae9dbb074d

where the value of "compose" is the Id.

How can the same thing be accomplished in the new UI?

回答1:

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.



回答2:

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".



回答3:

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.