将多个动态附件添加到电子邮件中

时间:2017-11-28 20:45:20

标签: google-apps-script gmail

我列出了文件夹的所有PDF文件并将其发送到电子邮件中。 问题是我不知道如何附加多个文件。

这是我到目前为止所尝试的:将文件放入blob然后传递它。 其他尝试是将blob [0]和blob 1放入,如果有2个pdf文件,但它不起作用。

var folders = DriveApp.getFoldersByName(folderToScan);
  var folder = folders.next();
  var contents = folder.getFiles();

  var blob = [];
  var filesTextList = "";

  // foreach file
  for(var counter = 0;contents.hasNext();counter++)
  {
    file = contents.next();

    var MimeType = file.getMimeType();

    // filter PDF
    if(file.getMimeType() == "application/pdf")
       {
         blob[counter] = file.getBlob();
         // add file name to text
         filesTextList += "\n" + file.getName();
    }
  }

  MailApp.sendEmail(sender, subject, message, 
   {attachments: blob}
);

如果我只有1个blob文件,{attachments:blob [0]}正在运行,但它不是动态的

这是邮件行的调试器: debugger

1 个答案:

答案 0 :(得分:1)

sendEmail methodattachments参数需要"要使用电子邮件发送的文件数组"。它们可以是File对象,你不必从它们中获取blob。

更重要的是,您的循环将创建一个包含未定义元素的数组,因为blob[counter]仅在文件为PDF时被分配,但counter的值无论如何都会增加。我不认为sendEmail会对此感到高兴。

使用while循环和迭代器,以及push方法将元素添加到数组中。一个完整的例子。

function emailatt() {
  var contents = DriveApp.getFolderById("id here").getFiles();
  var attachments = [];
  while (contents.hasNext()) {
    var file = contents.next();
    if (file.getMimeType() == "application/pdf") {
      attachments.push(file);
    }
  }
  MailApp.sendEmail("user@example.com", "subject", "body", {attachments: attachments});
}

除此之外:当你知道你想要什么文件夹时,通过Id获取文件夹是最好的。首先使用getFoldersByName,然后选择具有该名称的任何文件夹,这是一种不太健全的方法。