【发布时间】:2021-05-25 08:53:19
【问题描述】:
我正在尝试解压缩作为附件发送到我的电子邮件的 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 Drive 中。如果它是应用程序/gzip,我会收到错误消息。这是我的日志:
- 10:43:21 AM 信息 yahoo.no!dotl.no!1621555200!1621641599.xml.gz
- 10:43:21 AM 信息应用程序/gzip
- 10:43:21 AM 信息 ja gzip
- 上午 10:43:19 错误异常:无效 参数 lagreVedlegg @ Code.gs:42
我希望有人可以帮助我弄清楚如何解压缩 gz 文件,我没有找到任何有关使用 ungzip 的教程。 (我找到了一个他们写 gunzip 的地方,但看起来不太对。)
我发现了这个:'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")
}
}
}
【问题讨论】:
-
您的脚本不符合minimal reproducible example 的要求,消息未定义,没有函数声明,无法使用。
-
谢谢@Cooper。我认为,因为它适用于 zip,所以只发布问题发生的代码就足够了,以保持最小化。我现在已经发布了这个功能。请让我知道任何解释 Utilities.ungzip 和 Utilities.unzip 之间区别的地方。
-
看起来这可能是一个解决方案,但我不知道为什么,我必须在未来的报告中对其进行更多测试。在 if(vedleggstype=='application/gzip') 我添加 attachment.setContentType('application/x-gzip'); var attachmentBlob = attachment.copyBlob();