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

Ing*_*org 2 google-apps-script

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

\n

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

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

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

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

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

\n

我发现了这个:在 Apps 脚本中取消 gzipping Blob 时出现“无效参数”错误\n但我不明白它。

\n

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

\n
function lagreVedlegg(){\n  var folderID= \'\'; //I deleted my ID\n  var tittelen = "Report Domain: dotl.no";\n  var tittelen2 = "Report domain: dotl.no";\n  var tittelLengde = tittelen.length;\n\n  var eldreEnn = new Date(2021,4,21); //huska at telling starter p\xc3\xa5 0, s\xc3\xa5 m\xc3\xa5ned 4 er mai\n\n  var root = DriveApp.getRootFolder();\n  var parentFolder = DriveApp.getFolderById(folderID);\n  var antall = 20;\n\n  var threads = GmailApp.getInboxThreads(0, antall);\n  //Logger.log(threads)\n  for(var i in threads){\n    var thread = threads[i];\n    var message = thread.getMessages()[0]; // Get first message\n    //Logger.log(message)\n    var tittel = message.getSubject();\n    var tittelKort = tittel.substring(0,tittelLengde);\n    Logger.log(tittelKort)\n    var avsender = message.getFrom(); \n    //Logger.log(avsender)\n    var dato = message.getDate(); \n    //Logger.log(dato)\n    //Logger.log(eldreEnn)\n\n    if((tittelKort==tittelen || tittelKort==tittelen2)  && dato > eldreEnn){\n      Logger.log(avsender); // Log from address of the message\n      var attachments = message.getAttachments();\n      for(var k in attachments){\n        var attachment = attachments[k];\n        var attachmentBlob = attachment.copyBlob();\n        var vedleggsnavn = attachment.getName();\n        Logger.log(vedleggsnavn)\n        var vedleggstype = attachment.getContentType();\n        Logger.log(vedleggstype)\n        if(vedleggstype==\'application/gzip\'){\n          Logger.log("ja gzip");\n          attachment.setContentType(\'application/x-gzip\');\n          var attachmentBlob = attachment.copyBlob();\n          var files = Utilities.ungzip(attachmentBlob);\n          }\n        if(vedleggstype==\'application/zip\'){\n          Logger.log("ja zip");\n          var files = Utilities.unzip(attachmentBlob);\n          }\n        Logger.log(files)\n        files.forEach(function(file) {\n          Logger.log(file)\n          //Logger.log(parentFolder)\n          parentFolder.createFile(file);\n        })\n      }\n      thread.moveToArchive();\n      Logger.log(tittel + "flyttet")\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Mar*_*rtí 6

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

\n

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

\n
function ungzipAttahcment() {\n  const message = GmailApp.getMessageById(\'...\')\n  const attachment = message.getAttachments()[0]\n  attachment.setContentType(\'application/x-gzip\')\n  const blob = Utilities.ungzip(attachment)\n}\n
Run Code Online (Sandbox Code Playgroud)\n