使用 GAS 解压缩 gz 文件会引发错误异常:参数无效

2024-04-09

我正在尝试解压缩作为附件发送到我的电子邮件的 DMARC 报告。它适用于 zip 文件,但不适用于 gz 文件。

在我的代码中,我首先按主题获取正确的电子邮件。如果主题正确,则运行此脚本:

var attachments = message.getAttachments();
  for(var k in attachments){
    var attachment = attachments[k];
    var attachmentBlob = attachment.copyBlob();
    var vedleggsnavn = attachment.getName();
    Logger.log(vedleggsnavn)
    var vedleggstype = attachment.getContentType();
    Logger.log(vedleggstype)
    if(vedleggstype=='application/gzip'){
      Logger.log("ja gzip");
      var files = Utilities.ungzip(attachmentBlob);
      }
    if(vedleggstype=='application/zip'){
      Logger.log("ja zip");
      var files = Utilities.unzip(attachmentBlob);
      }

如果附件类型是应用程序/zip,它将被解压缩并保存在我的 Google 云端硬盘中。如果它是应用程序/gzip,我会收到错误。这是我的日志:

  • 上午 10:43:21 信息 yahoo.no!dotl.no!1621555200!1621641599.xml.gz
  • 10:43:21 AM 信息应用程序/gzip
  • 10:43:21 AM 信息 ja gzip
  • 10:43:19 AM 错误异常:无效 参数 lagreVedlegg @ Code.gs:42

我希望有人可以帮助我弄清楚如何解压缩 gz 文件,我没有找到任何有关使用 ungzip 的教程。 (我找到了一个他们写gunzip的地方,但看起来不太对。)

我找到了这个:Apps 脚本中取消 gzipping Blob 时出现“无效参数”错误 https://stackoverflow.com/questions/60059821/invalid-argument-error-with-un-gzipping-blob-in-apps-script但我不明白。

有人告诉我我的代码不够。我认为既然它适用于 zip,那么只发布问题发生的代码就足够了,以使其保持最小。但现在我将发布我的完整功能:

function lagreVedlegg(){
  var folderID= ''; //I deleted my ID
  var tittelen = "Report Domain: dotl.no";
  var tittelen2 = "Report domain: dotl.no";
  var tittelLengde = tittelen.length;

  var eldreEnn = new Date(2021,4,21); //huska at telling starter på 0, så måned 4 er mai

  var root = DriveApp.getRootFolder();
  var parentFolder = DriveApp.getFolderById(folderID);
  var antall = 20;

  var threads = GmailApp.getInboxThreads(0, antall);
  //Logger.log(threads)
  for(var i in threads){
    var thread = threads[i];
    var message = thread.getMessages()[0]; // Get first message
    //Logger.log(message)
    var tittel = message.getSubject();
    var tittelKort = tittel.substring(0,tittelLengde);
    Logger.log(tittelKort)
    var avsender = message.getFrom(); 
    //Logger.log(avsender)
    var dato = message.getDate(); 
    //Logger.log(dato)
    //Logger.log(eldreEnn)

    if((tittelKort==tittelen || tittelKort==tittelen2)  && dato > eldreEnn){
      Logger.log(avsender); // Log from address of the message
      var attachments = message.getAttachments();
      for(var k in attachments){
        var attachment = attachments[k];
        var attachmentBlob = attachment.copyBlob();
        var vedleggsnavn = attachment.getName();
        Logger.log(vedleggsnavn)
        var vedleggstype = attachment.getContentType();
        Logger.log(vedleggstype)
        if(vedleggstype=='application/gzip'){
          Logger.log("ja gzip");
          attachment.setContentType('application/x-gzip');
          var attachmentBlob = attachment.copyBlob();
          var files = Utilities.ungzip(attachmentBlob);
          }
        if(vedleggstype=='application/zip'){
          Logger.log("ja zip");
          var files = Utilities.unzip(attachmentBlob);
          }
        Logger.log(files)
        files.forEach(function(file) {
          Logger.log(file)
          //Logger.log(parentFolder)
          parentFolder.createFile(file);
        })
      }
      thread.moveToArchive();
      Logger.log(tittel + "flyttet")
    }
  }
}

这似乎是一个错误。Utilities.unzip似乎只适用于 MIME 类型的文件application/x-gzip并且不支持现代application/gzip。有他们的问题跟踪器上的错误报告 https://issuetracker.google.com/189198795, 已经。单击白色星号 (☆) 可赋予其更高的优先级。

作为解决方法,您可以将内容类型设置为application/x-gzip:

function ungzipAttahcment() {
  const message = GmailApp.getMessageById('...')
  const attachment = message.getAttachments()[0]
  attachment.setContentType('application/x-gzip')
  const blob = Utilities.ungzip(attachment)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GAS 解压缩 gz 文件会引发错误异常:参数无效 的相关文章

  • 如何使用 Google Apps 脚本限制文件的复制/下载/打印访问

    有没有人找到一种方法来限制使用谷歌应用程序脚本复制 下载 打印电子表格的访问权限 背景信息 我创建了一个使用 setShareableByEditors false 限制编辑者共享权限的脚本 唯一的问题是编辑者仍然可以轻松地复制电子表格 然
  • 如何通过分页从附加页面中提取数据

    我成功返回了第一页数据 并获得了 API 调用中存在的附加数据页数 这是我尝试提取附加数据页的代码 try const response UrlFetchApp fetch root endpoint params const respon
  • 使用 nextpagetoken 在 Google Apps 脚本查询中提取超过 500 个结果

    在一个有用的回应中这个帖子 https stackoverflow com questions 34398021 directory query returns only 100 users我了解到我可以一次从我的域目录中提取最多 500
  • Google Apps 脚本 - 访问单元格备注和评论

    大家好 感谢您花时间查看我的问题 我是一名九年级老师 正在制作一份定制的成绩表 并且刚刚完成了一个 GUI 可以让家长查看孩子的成绩 然而 在实际的成绩单上 我使用单元格注释 以前是注释 来存储特定于成绩的信息 即吉米遗漏了作业的 b 部分
  • 将 showModalDialog() 的内容添加到剪贴板 Google 脚本

    当我单击按钮时 我已将格式化数据添加到模态对话框中 我想要的内容showModalDialog 当我单击按钮时也会自动添加到剪贴板 模态是用下面的代码生成的 并且temp是我想要添加到剪贴板的输出 Output to Html var ht
  • 将电子邮件签名添加到电子邮件通知脚本

    我正在 Google Apps 脚本上编写一段代码 以便每次在我的网站上发布新公告时发送电子邮件 这是供参考的代码 var url of announcements page https sites google com announcem
  • 寻找使用库版本的方法?

    我正在通过库在多个电子表格上部署脚本 但正如您所知 脚本 目前 还无法知道它是否正在运行最新版本 我试图通过为我的代码创建自己的版本控制来找到解决此问题的方法 我有一个 Web 服务返回我的库代码的最新版本号 以便我可以对其进行比较 但 o
  • 在提交 Google 表单时找不到具有给定 ID 的项目

    我创建了一个在 Google 表单上运行 onSubmit 的脚本 它应该获取上传到表单的图像的 ID 获取 Blob 形式的图像 然后将其转发到某个电子邮件地址 问题是 有时 大约十分之一 脚本会给出以下错误 例外 找不到具有给定 ID
  • Google 脚本图表默认排除标题

    使用以下脚本 function chartCreation var ss SpreadsheetApp getActive var sheet ss getSheetByName Sheet1 var chart sheet newChar
  • 将 Google 工作表图表导出为图像

    请您帮助了解如何使用谷歌脚本将图表导出到图像 我写了这段代码 但它不起作用 我担心 APIgetAs已弃用 function TestEmailCharts var sheet SpreadsheetApp getActiveSheet v
  • 将“密码”类型添加到 Google Apps 脚本输入框

    是否可以将 密码 类型分配给 Google Apps 脚本输入框 以便不显示文本 以下工作正常 但输入字段是一个简单的文本框 并显示文本而不是 Browser inputBox Please enter your password 我有一个
  • Google Apps 脚本:从云端硬盘下载文件(同一用户)

    我正在尝试编写一个 Google Apps 脚本来下载特定云端硬盘文件夹中的所有文件 可能是 csv 文件 我找到了 getDownloadUrl 方法 但我不知道该做什么do用它 我目前正在尝试以下代码 其中files是文件夹中的文件列表
  • 触发器根据其创建维护激活序列并在每次运行时保护电子表格数据

    我正在向我的 Web 应用程序发送 5 个请求 import requests backodds 3 00 layteam Flamengo layodds 1 50 advantage 25 55 webAppsUrl https scr
  • 从 Gmail 获取 pdf 附件作为文本

    我在网络和 Stack Overflow 上搜索但没有找到解决方案 我尝试做的事情如下 我通过邮件收到某些附件 我希望将其作为 纯 文本进行进一步处理 我的脚本如下所示 function MyFunction var threads Gma
  • 如何使用应用程序脚本在 Google 电子表格中移动工作表 [重复]

    这个问题在这里已经有答案了 我想使用应用程序脚本在电子表格中移动工作表 怎么做 最好的直播 你看过吗文档 https developers google com apps script reference spreadsheet sprea
  • 无法实施第三方 Google 日历会议插件

    我正在研究 Google 日历会议插件的实施并发现了一些问题 我按照文档执行示例代码 但它没有按预期工作 从我的角度来看 我的清单文件是完整的 但是当我尝试从 从清单部署 链接发布日历会议插件时 它会打开我的谷歌日历 但它不会显示我的会议
  • Google Apps 脚本:连接日期和时间

    更新 要使用 AppsScript 创建 Google 日历事件 我们可以使用以下简单方法createEvent eventName startTime endTime 我已经使用过这个并且没有任何问题 但我使用的唯一日期格式是谷歌表格中的
  • 将按钮添加到 Google 表格并在单击时为单元格设置值

    我是 Google 脚本的新手 我有一个包含 5 列的 Google 表格 在每一列上我需要一个按钮 带有文本1 2 3 4 5 在每个按钮上单击我需要将按钮文本设置为相应的单元格并隐藏单击的按钮 是否可以 您可以插入看起来像按钮的图像 然
  • 从 Google 电子表格接收实时更新

    我正在尝试设置与 Google 电子表格的双向同步 我可以使用其数据集将更改推送到 Google 电子表格Google 表格 API V4 https developers google com sheets 现在 我希望每当有人实时或近实
  • 如何使用 Google Apps Docs 脚本将光标移动到文档的开头?

    我正在用我的 Google 文档编写 Google Apps 脚本的脚本 并想知道如何将光标移动到文档的开头 我最后想做的只是用一些字符串替换第一行 这个很简单 你可以使用setCursor method 记录在这里 https devel

随机推荐

  • 测试环境无法加载gem

    我的应用程序可以运行 我以前能够运行测试 但现在由于某种原因不能运行 从现在到那时发生的事情是我供应商activesupport 但我已经撤消了这些更改 事实上我处于一个完全独立 不相关的分支中 我在工作期间运行的两个命令activesup
  • 如何在 ASP.NET 中设置自动实现属性的默认值[重复]

    这个问题在这里已经有答案了 我开始知道 C 3 0 具有自动实现属性的新功能 我喜欢它 因为我们不必在此声明额外的私有变量 与早期的属性相比 之前我使用的是属性 即 private bool isPopup true public bool
  • 从 sqlmodel 获取连接表作为 fastapi 中的嵌套响应模型

    我无法弄清楚如何使用 fastapi 和 sqlmodel 显示一对多关系 我读过这篇文章question https stackoverflow com questions 72870598 getting nested joined t
  • 将同步请求包装到asyncio(async/await)中?

    我正在用 Python 3 6 编写一个工具 该工具将请求发送到多个 API 具有各种端点 并收集它们的响应以解析并将它们保存在数据库中 我使用的 API 客户端有一个同步请求 URL 的版本 例如他们使用 urllib request R
  • thrift:generate-python 在 SBT 中不生成 Python 文件

    I use sbt 节俭 https github com bigtoast sbt thrift 0 6我在构建定义中有以下内容 thriftPythonEnabled true thriftPythonOutputDir lt lt s
  • 动态对象创建

    我有一个接受字符串对象名称的函数 我需要该函数来创建与字符串值同名的对象的新实例 例如 function Foo function create name return new name create Foo should be equiv
  • 找不到 com.google.firebase:firebase-database:9.2.0

    我试图将新的 firebase 数据库安装到我的应用程序中 但失败并出现下一个错误 错误 找不到 com google firebase firebase database 9 2 0 必需的 经过 应用程序名称 应用程序 未指定 比我克隆
  • 1and1.com 上 SQL Server 连接字符串的正确格式

    除了给 1and1 com 网络托管的支持人员打电话和发送电子邮件之外 我还花了几个小时尝试在网络上搜索此内容 但没有成功 我有 ASP NET 页面 它使用实体框架连接到 MS SQL Server 数据库 在我的本地机器上 一切正常 自
  • Node.JS 的默认文件夹功能

    我想使用node js和socket io向我的网站添加一些实时功能 但不必处理页面请求 响应的麻烦 我能否获得正常的文件夹功能 首先提供index html 然后自动加载任何js css 依赖项 Thanks 您可以使用 Express
  • 如何配置 vim 在编辑 python 文件时不在行首添加注释

    当我在编辑 python 文件时在 Vim 中的空行上以插入模式添加 时 vim 将 移动到行的开头 但我希望将 插入到我输入它的选项卡级别 例如 在 vim 中编写此内容时 for i in range 10 不会停留在我输入的位置 它是
  • 如何在 PHP 中生成密码,就像 Devise Gem 在 Ruby on Rails 中生成的那样

    我正在将网站从 Ruby on Rails 更新为 PHP 我需要生成由 Devise Gem 在 Ruby on Rails 中生成的密码 我必须知道密码的哈希方法是什么 才能使用 PHP 创建相同的方法 但作为初学者 要在 Ruby o
  • BigQuery SQL:对 7 天内出现的具有共享 ID 的行进行分组,并返回最近出现的值

    我有一个带有日期标记的事件表 我需要将其捆绑到 7 天的组中 从每个 event id 最早出现的时间开始 最终输出应返回每个捆绑包的开始日期和结束日期以及每个捆绑包中最新事件的 值 列 没有预定的开始日期 7 天 窗口是任意的 而不是 一
  • Dart - 隔离跨窗口通信

    Dart 隔离是否可以进行跨窗口通信 这是我的场景 用户在浏览器窗口 A 中打开网站 窗口 A 生成一个新的隔离 然后 用户单击一个链接 该链接将创建一个新选项卡并打开浏览器窗口 B 假设该链接位于同一域中 等等 浏览器窗口 B 可以从浏览
  • 带 ILU 预处理器的一般最小残差 (GMRES)

    我正在尝试在我编写的 GMRES 代码中实现 ILU 预处理器 为了求解线性系统 Ax b 我正在尝试使用尺寸为 25x25 的简单三对角 SPD 矩阵 如您所见 我正在计算使用 spilu 方法进行预处理 代码运行没有错误 但解决方案显然
  • 通过“wsl [command]”调用命令与打开 wsl shell 并调用“[command]”有什么区别?

    我在 Windows 10 上通过 WSL 2 0 使用 Ubuntu 并希望从 Windows 命令行运行 Texlive 为此 我将 Texlive 文件夹添加到路径中 etc environment 我还尝试了许多其他位置 例如 HO
  • 无法使用 python3 和 sqlite3 安装 pyspatialite

    我无法安装 pyspatialite 当我尝试时 它给了我这个错误 pip install pyspatialite Downloading unpacking pyspatialite Could not find a version t
  • 如何在Delphi 11.3 CE版本上安装JCL和JVCL

    Jcl 和 JCVL 没有创建库 gt Radstudio Tools jcl 2 8 0 8551 source vcl 该版本的产品不支持命令行编译 所以我必须手动运行它 但是 如何查看运行时包或设计时包 是否有无需 JediInsta
  • PagerAdapter 的 IllegalStateException

    我在此活动中收到 IllegalStateException 但不太确定发生了什么 这是 QuickContactActivity 中的 ViewPagerAdapter 类 private class ViewPagerAdapter e
  • 可以让 CompareValidator 接受带逗号的数字吗?

    我一直在对网页上的输入字段进行 Double 类型检查 但现在我需要允许逗号 这可以使用 CompareValidator 来完成还是我需要使用正则表达式验证器 而不是使用Type Double 尝试使用Type Currency 它应该接
  • 使用 GAS 解压缩 gz 文件会引发错误异常:参数无效

    我正在尝试解压缩作为附件发送到我的电子邮件的 DMARC 报告 它适用于 zip 文件 但不适用于 gz 文件 在我的代码中 我首先按主题获取正确的电子邮件 如果主题正确 则运行此脚本 var attachments message get