简体   繁体   中英

Sending individual email for each attachment in a Google Drive folder

I'm trying to write a script that will take all the files from a specific Google Drive folder and send them as email attachments. I need each attachment to be its own individual email.

Here's what I have so far:

 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 }) } } 

At the minute, the script is sending the emails but adding attachments consecutively. So, if the folder has 3 JPEGs, it'll send 3 emails, one containing 1 attachment, another containing 2, and a 3rd containing all 3 attachments.

I'm really new to all this but really enjoying messing around with it. I'm confused as to what to do after getting the files and how I can then link them as attachments to their own individual email. Do I need to give each attachment its own array?

Thanks in advance.

push - adds file to stack.

pop - retrieve and remove file from stack.

With push , you simply add another file to your current list of files.

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

What you need to do is pop files from the list to remove them. So instead of grabbing the whole list like:
var attachment = (attachments)

You should instead do:

var attachment = attachments.pop()

Currently your while {...} statement begins with adding another file to the list, then sending the whole list of files without removing the already sent file.

So your code should look like this:

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
    })
  }
}

Personally, I would remove the the list since you do not need to store each file, you just want to send them in separate mails.

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
    })
  }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM