是否可以将 Gmail Add-ons 的当前邮件访问令牌(或等效令牌)与 Gmail API 一起使用?
Is it at all possible to use the current message access token (or equivalent) for Gmail Add-ons with the Gmail API?
背景:
Google Workspace Add-ons for Gmail 允许在 contextualTrigger 上访问 API 中的 currently-open 电子邮件,范围为:
https://www.googleapis.com/auth/gmail.addons.current.message.readonly
必须使用 GmailApp.setCurrentMessageAccessToken(accessToken)
传递访问令牌才能授予对此当前打开的电子邮件的访问权限:
var accessToken = e.gmail.accessToken;
var messageId = e.gmail.messageId;
// The following function enables short-lived access to the current
// message in Gmail. Access to other Gmail messages or data isn't
// permitted.
GmailApp.setCurrentMessageAccessToken(accessToken);
var mailMessage = GmailApp.getMessageById(messageId);
来自以上文档:
setCurrentMessageAccessToken(accessToken)
Sets the current message access token that enables the script to access the current GmailMessage
properties.
Only Gmail add-on projects using Gmail current message scopes require this method.
不幸的是,关于访问令牌和当前消息范围的页面的 link 目前都已损坏并导致 404 页,因此我无法从此处找到更多信息。
问题:
如何直接使用 Gmail API 而不是 GmailApp
来实现相同的功能?
Gmail: users.messages.get 的文档指出 https://www.googleapis.com/auth/gmail.addons.current.message.readonly
是调用此方法的有效范围,但是,对于 Gmail API.
不起作用的东西:
- 使用
ScriptApp.getOAuthToken()
- 根据 this documentation, "The access token than enables Gmail scopes is not the same as the access token returned by ScriptApp.getOAuthToken()
。您必须使用操作事件中提供的令牌 object."
- 提供来自事件 object 的访问令牌作为
Authorization: Bearer
header 中的令牌也会引发 403 错误。
搜索到的功能类似于:
var accessToken = e.gmail.accessToken
var messageId = e.gmail.messageId
Gmail.setCurrentMessageAccessToken(accessToken) // made up method
var mailMessage = Gmail.Users.Messages.get("me", messageId)
我认为在那种情况下,为了包含访问令牌,使用 UrlFetchApp 直接请求 Gmail API 的端点怎么样?当你的脚本被转换后,它变成如下。在这种情况下,范围可以从Authorization Scopes.
中选择
示例脚本:
var accessToken = "###";
var messageId = "###";
var userId = "me";
var url = `https://gmail.googleapis.com/gmail/v1/users/${userId}/messages/${messageId}`;
var res = UrlFetchApp.fetch(url, {headers: {authorization: `Bearer ${accessToken}`}});
console.log(res.getContentText())
注:
- 在这种情况下,请注意范围。 Ref
参考文献:
已添加:
您的目标如下。
You want to use the method of "users.messages.get" of Gmail API using the scope of gmail.addons.current.message.readonly
.
根据我们在评论中的讨论,我将目前的情况总结如下。
当我检查 ScriptApp.getOAuthToken()
为设置清单文件的 GAS 项目检索的访问令牌的包含范围时,我可以确认 gmail.addons.current.message.readonly
和script.external_request
.
当我看到the official document时,为了使用“users.messages.get”的方法,gmail.addons.current.message.readonly
显示为Requires one of the following OAuth scopes:
。
但是,当gmail.addons.current.message.readonly
的范围用于“users.messages.get”的方法时,会出现Missing access token for authorization.
这样的错误。
当包含gmail.readonly
的范围时,可以消除错误。
根据上述情况,将此报告给 Google 问题跟踪器如何? Ref
答案:
目前,这是不可能的。
问题概要:
GmailApp
没有方法或 class 允许在单个消息上操作标签,只有线程。
- 上下文触发器中提供的
accessToken
似乎与 OAuth 令牌不同,因此不能用于验证读取当前消息的调用。
- 无法通过 Gmail 传递令牌 API 以便可以使用当前邮件。
- 获取消息的唯一方法是使用
gmail.readonly
等范围。
- 虽然
https://www.googleapis.com/auth/gmail.addons.current.message.readonly
被列为 messages.get
的有效范围,但似乎无法在连接到 Gmail API 时实际使用该范围。
进一步的步骤:
- 我已提交功能请求 here 以添加在 Apps 脚本中操作来自 GmailApp class 的消息标签的功能。请为这个问题加注星标以查看其优先级是否已提高。
- 关于此说明,this page 已经有针对同一功能的功能请求,但由于它已有两年多没有得到 Google 的回复,我已经提交了另一个。
- 我已使用“发送反馈”按钮为 messages.get 提交了文档反馈,以澄清范围
gmail.addons.current.message.readonly
或从页面中删除。
背景:
Google Workspace Add-ons for Gmail 允许在 contextualTrigger 上访问 API 中的 currently-open 电子邮件,范围为:
https://www.googleapis.com/auth/gmail.addons.current.message.readonly
必须使用 GmailApp.setCurrentMessageAccessToken(accessToken)
传递访问令牌才能授予对此当前打开的电子邮件的访问权限:
var accessToken = e.gmail.accessToken;
var messageId = e.gmail.messageId;
// The following function enables short-lived access to the current
// message in Gmail. Access to other Gmail messages or data isn't
// permitted.
GmailApp.setCurrentMessageAccessToken(accessToken);
var mailMessage = GmailApp.getMessageById(messageId);
来自以上文档:
setCurrentMessageAccessToken(accessToken)
Sets the current message access token that enables the script to access the current
GmailMessage
properties.Only Gmail add-on projects using Gmail current message scopes require this method.
不幸的是,关于访问令牌和当前消息范围的页面的 link 目前都已损坏并导致 404 页,因此我无法从此处找到更多信息。
问题:
如何直接使用 Gmail API 而不是 GmailApp
来实现相同的功能?
Gmail: users.messages.get 的文档指出 https://www.googleapis.com/auth/gmail.addons.current.message.readonly
是调用此方法的有效范围,但是,对于 Gmail API.
不起作用的东西:
- 使用
ScriptApp.getOAuthToken()
- 根据 this documentation, "The access token than enables Gmail scopes is not the same as the access token returned byScriptApp.getOAuthToken()
。您必须使用操作事件中提供的令牌 object." - 提供来自事件 object 的访问令牌作为
Authorization: Bearer
header 中的令牌也会引发 403 错误。
搜索到的功能类似于:
var accessToken = e.gmail.accessToken
var messageId = e.gmail.messageId
Gmail.setCurrentMessageAccessToken(accessToken) // made up method
var mailMessage = Gmail.Users.Messages.get("me", messageId)
我认为在那种情况下,为了包含访问令牌,使用 UrlFetchApp 直接请求 Gmail API 的端点怎么样?当你的脚本被转换后,它变成如下。在这种情况下,范围可以从Authorization Scopes.
中选择示例脚本:
var accessToken = "###";
var messageId = "###";
var userId = "me";
var url = `https://gmail.googleapis.com/gmail/v1/users/${userId}/messages/${messageId}`;
var res = UrlFetchApp.fetch(url, {headers: {authorization: `Bearer ${accessToken}`}});
console.log(res.getContentText())
注:
- 在这种情况下,请注意范围。 Ref
参考文献:
已添加:
您的目标如下。
You want to use the method of "users.messages.get" of Gmail API using the scope of
gmail.addons.current.message.readonly
.
根据我们在评论中的讨论,我将目前的情况总结如下。
当我检查
ScriptApp.getOAuthToken()
为设置清单文件的 GAS 项目检索的访问令牌的包含范围时,我可以确认gmail.addons.current.message.readonly
和script.external_request
.当我看到the official document时,为了使用“users.messages.get”的方法,
gmail.addons.current.message.readonly
显示为Requires one of the following OAuth scopes:
。但是,当
gmail.addons.current.message.readonly
的范围用于“users.messages.get”的方法时,会出现Missing access token for authorization.
这样的错误。当包含
gmail.readonly
的范围时,可以消除错误。
根据上述情况,将此报告给 Google 问题跟踪器如何? Ref
答案:
目前,这是不可能的。
问题概要:
GmailApp
没有方法或 class 允许在单个消息上操作标签,只有线程。- 上下文触发器中提供的
accessToken
似乎与 OAuth 令牌不同,因此不能用于验证读取当前消息的调用。 - 无法通过 Gmail 传递令牌 API 以便可以使用当前邮件。
- 获取消息的唯一方法是使用
gmail.readonly
等范围。 - 虽然
https://www.googleapis.com/auth/gmail.addons.current.message.readonly
被列为messages.get
的有效范围,但似乎无法在连接到 Gmail API 时实际使用该范围。
进一步的步骤:
- 我已提交功能请求 here 以添加在 Apps 脚本中操作来自 GmailApp class 的消息标签的功能。请为这个问题加注星标以查看其优先级是否已提高。
- 关于此说明,this page 已经有针对同一功能的功能请求,但由于它已有两年多没有得到 Google 的回复,我已经提交了另一个。
- 我已使用“发送反馈”按钮为 messages.get 提交了文档反馈,以澄清范围
gmail.addons.current.message.readonly
或从页面中删除。