我正在尝试构建一个 Google Workspace 附加卡,从工作表中提取一些信息并将其添加到 Gmail 卡中。
在工作表上,我有一个电子邮件列表,其消息 ID 是从 API 中提取的(例如:1930e10b19e703er)
但是我尝试从 Google Apps Script 附加功能 onGmailMessageOpen 匹配的消息 ID 不同(例如:“msg-f:1815195880117154226”)
因此无法匹配 ID,因此无法从 Sheet/CSV 中提取任何信息。我希望 Apps Script ID 与 API 中的 ID 相同。
我尝试了各种不同的方法。以下是最新脚本中拉取 ID 的部分。
function onGmailMessageOpen(eventObject) {
// Defensive check for the event object
if (!eventObject || !eventObject.gmail) {
return createDefaultCard('No email context available');
}
// Activate temporary Gmail scopes to allow message metadata to be read.
var accessToken = eventObject.gmail.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
// Get the ID of the message the user has open
var messageId = eventObject.gmail.messageId;
// Log the extracted message ID
Logger.log('Retrieved Message ID: "' + messageId + '"');
// Find implications from spreadsheet based on the messageId
var implications = findImplications(messageId);
// Create and return card
return createImplicationsCard(implications);
}
在日志中,它显示正在搜索精确的消息 ID:“msg-f:1815195880117154226”,然后搜索“工作表中的 ID:“1930e10b19e703er””
我也尝试过“var messageId = e.gmail.messageId;”,它也返回相同的“msg-f”id。
任何帮助都将非常感激。
您面临的问题源于 Gmail 根据上下文提供不同格式的消息 ID。您从 Gmail API 获取的 ID(例如
1930e10b19e703er
)是内部消息 ID,而您在事件中看到的 ID 格式onGmailMessageOpen
(例如msg-f:1815195880117154226
)是 Gmail Web 客户端使用的完整线程或“合格”消息 ID。为了确保您在 Google Workspace 插件中使用正确的消息 ID,您需要检索内部消息 ID 格式(例如
1930e10b19e703er
),而不是messageId
直接从onGmailMessageOpen
事件中使用。以下是将事件中的 ID 转换
onGmailMessageOpen
为 API 兼容的内部消息 ID 的解决方案:GmailApp.getMessageById()
通过 ID 从 中获取消息onGmailMessageOpen
。更新
onGmailMessageOpen
功能您可以按照以下方式实现此目的:
解释
GmailApp.getMessageById(qualifiedMessageId)
:这使用事件qualifiedMessageId
提供的内容onGmailMessageOpen
来检索GmailMessage
对象。message.getId()
:这将直接从消息对象中检索内部消息 ID,该 ID 应与您的 Gmail API 中的格式和电子表格中的 ID 相匹配。通过使用此方法,
internalMessageId
变量应该保存消息 ID 的正确格式,并且您将能够成功地将其与电子表格中的 ID 进行匹配。