我正在尝试解压缩作为附件发送到我的电子邮件的 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")
}
}
}