You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Gmail API的users.messages.get()解码邮件失败求助

问题描述
  • 使用Google Apps Script调用Gmail API的users.messages.get()接口读取Gmail邮件,持有有效的邮件ID,代码片段如下:
let message = Gmail.Users.Messages.get("me", id);
let encodedBody = message["payload"]["parts"][0]["body"]["data"];
let body = Utilities.base64Decode(encodedBody);
  • 按官方文档说明,encodedBody应为Base64编码字符串,在文档的「Try this method」功能中确实能得到可正常解码的字符串,但运行Google Apps Script时抛出异常:Exception: Could not decode string.
  • 查看控制台发现encodedBody是如下形式的整数数组:[60,33,68,79,67,84,89,80,69,32,104,116,109...]
  • 由于相关问题的原因,无法使用GmailApp.search().getMessages()方法。
原因分析

Google Apps Script的高级Gmail服务与直接调用REST API的返回格式存在差异:REST API返回的body.data是Base64编码字符串,但高级服务会自动将该字段解析为Uint8Array(整数数组),而非保留原始字符串格式。因此直接调用Utilities.base64Decode()会报错,因为该方法要求传入字符串类型的参数,而非数组。

可用代码示例

以下是两种可行的读取Gmail邮件正文的实现方式:

方式1:将整数数组转换为Base64字符串后解码

function getGmailBodyById(messageId) {
  // 获取邮件详情
  const message = Gmail.Users.Messages.get("me", messageId);
  
  // 提取正文数据的整数数组
  const bodyData = message.payload.parts[0].body.data;
  
  // 将Uint8Array转换为Base64字符串
  const base64Str = Utilities.base64Encode(bodyData);
  
  // 解码为Blob并转换为文本(根据邮件实际MIME类型调整,示例为HTML)
  const decodedBlob = Utilities.newBlob(Utilities.base64Decode(base64Str), "text/html");
  const bodyContent = decodedBlob.getDataAsString();
  
  Logger.log(bodyContent);
  return bodyContent;
}

方式2:直接从整数数组创建Blob获取文本(更高效)

function getGmailBodyById(messageId) {
  // 获取邮件详情
  const message = Gmail.Users.Messages.get("me", messageId);
  
  // 提取正文数据的整数数组
  const bodyData = message.payload.parts[0].body.data;
  
  // 直接用整数数组创建Blob,指定正确的MIME类型
  const blob = Utilities.newBlob(bodyData, "text/html");
  const bodyContent = blob.getDataAsString();
  
  Logger.log(bodyContent);
  return bodyContent;
}

关键注意事项

  • 邮件结构适配:部分邮件的正文可能直接存放在payload.body.data而非payload.parts[0].body.data(比如纯文本邮件、无附件的邮件),需根据实际邮件结构调整路径。
  • MIME类型匹配:需根据邮件的mimeType字段指定正确的类型,常见类型包括text/html(HTML格式)和text/plain(纯文本格式)。

内容的提问来源于stack exchange,提问作者Hard Mode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:40:19