【问题标题】:Sending individual email for each attachment in a Google Drive folder为 Google Drive 文件夹中的每个附件发送单独的电子邮件
【发布时间】:2018-03-03 09:58:57
【问题描述】:

我正在尝试编写一个脚本,该脚本将从特定的 Google Drive 文件夹中获取所有文件并将它们作为电子邮件附件发送。我需要每个附件都是单独的电子邮件。

这是我目前所拥有的:

function sendEmails() {
  var files = DriveApp.getFolderById("FolderID").getFilesByType(MimeType.JPEG);
  var attachments = [];
  while (files.hasNext()) {
    var file = files.next();
    attachments.push(file.getAs(MimeType.JPEG));
    Logger.log(attachments)
  var emailAddress = "testest@test.com";
  var message = "image attached";
  var subject = "test";
  var attachment = (attachments)
  MailApp.sendEmail({
      to: emailAddress,
      subject: subject,
      htmlBody: message,
      attachments: attachments
    })
  }
}

此时,脚本正在发送电子邮件,但会连续添加附件。因此,如果文件夹有 3 个 JPEG,它将发送 3 封电子邮件,其中一封包含 1 个附件,另一封包含 2 个,第三封包含所有 3 个附件。

我对这一切真的很陌生,但真的很喜欢玩弄它。我对获取文件后该怎么做以及如何将它们作为附件链接到他们自己的个人电子邮件感到困惑。我需要给每个附件一个自己的数组吗?

提前致谢。

【问题讨论】:

    标签: email google-apps-script google-drive-api email-attachments


    【解决方案1】:

    push - 将文件添加到堆栈。

    pop - 从堆栈中检索和删除文件。

    使用 push,您只需将另一个文件添加到当前文件列表中。

    attachments.push(file.getAs(MimeType.JPEG));*

    您需要做的是从列表中pop 文件以删除它们。所以不要像抓取整个列表:
    var attachment = (attachments)

    你应该这样做:

    var attachment = attachments.pop()

    目前您的while {...} 语句首先将另一个文件添加到列表中,然后发送整个文件列表而不删除已发送的文件。

    所以你的代码应该是这样的:

    function sendEmails() {
      var files = DriveApp.getFolderById("FolderID").getFilesByType(MimeType.JPEG);
      var attachments = [];
      while (files.hasNext()) {
        var file = files.next();
        attachments.push(file.getAs(MimeType.JPEG));
        Logger.log(attachments)
      var emailAddress = "testest@test.com";
      var message = "image attached";
      var subject = "test";
      var attachment = (attachments.pop())
      MailApp.sendEmail({
          to: emailAddress,
          subject: subject,
          htmlBody: message,
          attachments: attachments
        })
      }
    }
    

    就个人而言,我会删除该列表,因为您不需要存储每个文件,您只需将它们发送到单独的邮件中。

    function sendEmails() {
      var files = DriveApp.getFolderById("FolderID").getFilesByType(MimeType.JPEG);
      while (files.hasNext()) {
        var file = files.next();
        // gets curent file only
        var attachments = (file.getAs(MimeType.JPEG));
        Logger.log(attachments)
      var emailAddress = "testest@test.com";
      var message = "image attached";
      var subject = "test";
      MailApp.sendEmail({
          to: emailAddress,
          subject: subject,
          htmlBody: message,
          attachments: attachments
        })
      }
    }
    

    【讨论】:

    • 您也可以将不变的var 声明移到循环之外。
    • 谢谢!它运行良好。我真的很感激帮助。我将多玩一点,看看是否可以让它在文件发送后从驱动器中删除文件。再次感谢您的帮助:)
    猜你喜欢
    • 2016-03-11
    • 2015-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 2015-07-26
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多