Gmail邮件ID或ThreadId如何映射到新的Gmail用户界面?

16

编辑:回应下面的第一个评论并为了清晰起见,这不是一个代码问题。问题很简单:

在新版 Gmail 用户界面中,我需要将什么内容放入 URI 查询字符串中以查看通过 Gmail API 创建的草稿邮件?

虽然这不是一个真正的代码问题,但我在 Stack Overflow 上提问,因为它是谷歌首选的 Gmail API 问题平台。

--

如果我在新版 Gmail 用户界面中查看草稿邮件,则 URI 如下:

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

我没有找到任何方法可以从通过 Gmail API 创建的邮件的 Id 或 ThreadId 创建此类链接。

以前,人们可以这样做:

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

"compose" 的值为 Id。

如何在新界面中实现同样的功能呢?


你能添加一些细节吗,比如使用的代码和遇到的错误问题? 如何提出好问题?如何创建一个最小、完整且可验证的示例 展示给社区你已经尝试过什么。 - ReyAnthonyRenacia
自从本周开始,它似乎可以工作了。当我使用旧的线程ID打开新的UI时,它会重定向到邮件/答案的新线程ID。你能确认一下吗? - Frank Szilinski
对我来说不起作用,弗兰克。你是指像这样吗?https://mail.google.com/mail/ca/u/1/#drafts?compose=1661237c4db71ace - Chris Wood
1
啊,像这样是可以工作的:https://mail.google.com/mail/ca/u/1/#drafts/1661237c4db71ace - Chris Wood
5个回答

13

我遇到了同样的问题,并在解决这个问题方面有一些成功经验,但仍存在一些无法克服的问题。

好消息:新的compose参数格式是某种“base40”编码。我在Gmail源代码中搜索了受限字母表字符串,并找到并去混淆了执行此编码/解码操作的代码段:https://gist.github.com/danrouse/52212f0de2fbfe33cfc56583f20ccb74

此代码包括可以用于Gmail格式查询参数的encodedecode函数。

坏消息:它正在将值编码为打开草稿电子邮件,但似乎无法使用Gmail API获取这些值。具体而言,它们看起来像这样:thread-f:NEW_THREAD_ID+msg-a:DRAFT_ID--虽然草稿ID与以前相同,但线程ID似乎不匹配Gmail API返回的任何ID。

有趣的是,如果您检查Gmail UI中的主题行,则其中包含所有旧格式和新格式ID的数据集属性-但仍不清楚如何以编程方式获取新的ID。


1
哇,非常棒的研究,kremonte!我会自己看一下,看看我能否帮助我们更进一步! - Chris Wood
1
今晚我自己看了一下。已经复制了您所说的关于base40的内容,并且可以看到您提到的data-*属性。有趣的是,我们习惯看到的ID前缀为"data-legacy"。您提到草稿IDs相同,但从数据属性来看似乎并非如此。对于我(对于新创建的草稿),旧的草稿和线程IDs相同,不类似于新的草稿和线程IDs。 - Chris Wood
1
啊 - 是的,thread-f和msg-f似乎与旧ID有一些映射。但是如果你解密查询字符串中的组合参数,则使用thread-a和msg-a。 - Chris Wood
3
好消息-再次查看几个月后,NEW_THREAD_ID的值现在只是Gmail API返回的十六进制线程ID的十进制表示。 - Chris Wood
2
哦,我之前使用JS整数进行转换,但是它们的精度不够。BigInt才是王道。 - Juan Campa
显示剩余7条评论

6

不再是真的了...请参考此问题:https://stackoverflow.com/questions/64022899/how-to-open-a-draft-created-with-gmail-api-in-browser - jogo

4

在 @kremonte 的代码基础上,结合 @chris-wood 的评论,我制作了一个 Rails gem,可以正确地创建打开 Gmail 中草稿的 URL。

这是链接 - https://github.com/GoodMeasuresLLC/gmail_compose_encoder

它适用于以下情况:“我的代码创建了一份草稿(当然预填了一些文本),现在我想以撰写模式打开这个草稿,以便我的用户在点击“发送”之前可以进行审核。”


感谢您花时间创建它!我不想打击任何人的士气,但请看上面原始问题的最后一条评论。令牌的组成方式再次发生了变化,但只有部分用户受到影响。这两种不同类型的令牌彼此不兼容,并且没有(干净的)方法可以知道用户正在使用哪种类型的令牌。我们曾经认为一旦弄清楚令牌格式就能解决问题,但它并不稳定到足以依赖。 - Chris Wood
我看到了那个评论,但在我的测试中没有遇到那种情况,所以我抱着侥幸心理将其应用程序发布了,因为让它基本工作比完全不工作要好(这是当前的情况)。 - Rob
啊,现在我收到报告说它又不工作了。唉。:( - Rob

1

如何获取草稿的URL

例如,如果您使用列表请求来获取您的草稿对象:

{
  "id": string,
  "message": {
    object (Message)
  }
}

您可以将此ID放入以下格式的URL中:

mail.google.com/mail/#inbox?compose=[id]

Eg.

mail.google.com/mail/#inbox?compose=3doinm3d08932d

这将打开相关草稿的GMail。

1

我曾经苦苦挣扎,因为我希望它可以与多个账户一起使用。但是,authuser参数并没有起到帮助的作用。

在u/组件之后插入电子邮件地址而不是整数解决了这个问题。

https://mail.google.com/mail/u/{email_address}/#drafts?compose={message_id}

消息 ID 是 API 提供的 ID。


它是否适用于其他电子邮件类型?例如,如果电子邮件在已发送文件夹中? - Nyuokimi
@Nyuokimi 我怀疑你能在已发送的消息上打开一个composer。但是你可以导航到一条消息并将其显示给用户。 - Stefanf
导航到一条消息并显示它是什么意思?我只有该消息的ID和电子邮件所有者的电子邮件。 - Nyuokimi
@Nyuokimi,我想让用户通过API修改并发送我准备好的草稿。这就是为什么我需要一个指向Gmail UI的URL。我不知道你想用那个URL实现什么目的。 - Stefanf
如果我知道电子邮件ID,我想通过URL在新窗口中打开现有的电子邮件。 - Nyuokimi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接