通过Gmail从URL发送.zip

时间:2018-03-28 18:12:15

标签: google-apps-script

这是我的代码:

function myFunction() {
  var url = "https://cdn-04.anonfile.com/t3ScWad7b9/fc36c282-1522257874/CRASH_FILES__2018.03.24.14.06.27_.zip";
  var blob = UrlFetchApp.fetch(url).getBlob();
  GmailApp.sendEmail("derekantrican@gmail.com", "", "", {attachments: [blob]});
}

如您所见,该函数从URL获取文件(.zip)并将其附加到随后发送的电子邮件中。问题是Google的服务器阻止了.zip:

blocked

"了解更多"在这里引导:https://support.google.com/mail/answer/6590?hl=en

此.zip(您可以自己从网址下载)只包含两个.log个文件和一个.xml文件 - 上面的网址都没有禁止这些文件。

我还尝试先上传到Google云端硬盘,然后发送:

function myFunction(){
  var url = "https://cdn-04.anonfile.com/t3ScWad7b9/fc36c282-1522257874/CRASH_FILES__2018.03.24.14.06.27_.zip";
  var zipBlob = UrlFetchApp.fetch(url).getBlob();
  zipBlob.setContentType("application/zip");
  var file = DriveApp.createFile(zipBlob);
  GmailApp.sendEmail("derekantrican@gmail.com", "", "", {attachments: [file.getBlob()]});
}

结果相同。还有其他建议吗?

1 个答案:

答案 0 :(得分:1)

您是否真的检查了' zip'的内容?保存到Google云端硬盘的文件?问题可能是由于您附加了HTML页面而不是zip文件。您提供的链接适用于着陆页,而不是下载本身,因此页面内容正是您调用UrlFetchApp.fetch()时所提供的内容。

以下是发送“GET'”之后保存到Google云端硬盘的内容。请求链接:

enter image description here

该页面要求用户手动单击按钮以启动下载。没有重定向,因此您无法使用此模式获取文件:

UrlFetchApp.feth(url, {followRedirects: true});

问题是,你能获得文件的实际链接吗?好吧,有点儿。在Chrome中,按 Ctrl + J (Windows)或 CMD + Shift + J (MacOS)。文件名旁边显示的URL是文件的实际直接链接。但是,这些都是非常短暂的,并在几秒钟内到期。

enter image description here

您可以抓取链接并快速将其粘贴到代码中以确保其正常工作

var blob = UrlFetchApp.fetch(url).getBlob();

  Logger.log(blob.getContentType()); //logs 'application/zip'
  Logger.log(blob.getName()); // logs CRASH_FILES__2018.03.24.14.06.27_.zip

 DriveApp.createFile(blob);

结果(请注意,由于服务器生成新的唯一链接,它会在几秒钟后停止工作): enter image description here