Google 用于查看电子邮件并将电子表格附件复制到 Google 云端硬盘的脚本

Google Script to look through an email and copy Spreadsheet attachments into Google Drive

每个星期一,我都会收到一份发送到我的 Gmail 的报告,其中有两个 Google 电子表格附件。

我每周都需要打开这些附件并将它们复制到我的 Google 驱动器中的特定文件夹中。

我想要一个 Google 脚本

1).每个星期一查看我的 Gmail 并搜索主题为:“截至 [日期] 的每小时资历报告和截至 [日期] 的每小时终止报告”的新电子邮件 | 注意:同一用户每周发送报告

2).复制这两个附件并通过文件夹 ID 将副本移动到 Google 文件夹。

我对 Google 脚本编写和在线查找还很陌生,我还没有找到很多可以帮助我实现此自动化的东西。有没有人对如何处理这个有任何想法?谢谢!

如果文件附加到电子邮件

  • 查找具有特定主题的电子邮件:这可以通过 GmailApp.search() 功能实现(您可以阅读更多相关信息 here)。请注意,这将 return 一个线程列表,每个线程又将包含一个消息列表。抓住第一个线程的第一条消息(我的方法)将工作正常,只要没有其他电子邮件与该主题(似乎是这种情况)。
  • 正在将附件保存到 Google 驱动器。这可以通过 Folder 对象的 createFile() 函数来完成(您可以在此处阅读更多相关信息)。您可以使用 getFolderById() 函数获取所需的 Folder 对象(您可以阅读更多相关信息 here)。

function myFunction() {
  var emailSubject = ""; // YOUR EMAIL SUBJECT
  var folderId = ""; //YOUR FOLDER ID (FOUND IN URL)

  var folder = DriveApp.getFolderById(folderId);

  var thread = GmailApp.search(emailSubject)[0];
  var message = GmailApp.getMessagesForThread(thread)[0];
  var attachments = message.getAttachments();
  
  for (var i = 0; i<attachments.length; i++){
    folder.createFile(attachments[i].copyBlob());
  }
}

如果文件是 link 共享驱动器

在这种情况下,该文件将不会显示为电子邮件的附件,因此此处无法使用之前使用的相同方法。但是,该文件将在您的云端硬盘中显示为与我共享。我在这里使用的方法是收集所有与您共享的文件(使用 searchFiles() 功能,您可以阅读更多相关信息 here),然后扫描电子邮件的纯文本以查找是否该电子邮件中提到了每个文件的 ID(意味着它是共享的)。

function myFunction() {
  var emailSubject = ""; // YOUR EMAIL SUBJECT
  var folderId = ""; //YOUR FOLDER ID (FOUND IN URL)

  var folder = DriveApp.getFolderById(folderId);

  var thread = GmailApp.search(emailSubject)[0];
  var message = GmailApp.getMessagesForThread(thread)[0];
  
  var files = DriveApp.searchFiles("sharedWithMe = true");

  while (files.hasNext()) {
    var file = files.next();
    if (message.getBody().includes(file.getId())){

      folder.createFile(file.getName(), file.getBlob(), file.getMimeType());
    }
  }

}

当然,您可以将此脚本设为限时触发脚本,如果您愿意,它会每天执行一次。在这种情况下,脚本应动态获取执行日期以每天收集正确的电子邮件。您可以阅读有关触发器的更多信息 here.