Save Gmail Files to Google Drive

The Google Script will save file attachments from Gmail threads marked with a particular label to a specific folder in Google Drive. It takes the last email message in a thread and saves the first attachment to Drive. Credit: S. Dolidze

Also see: Save Gmail Attachments to Google Drive

function main() {
  
  var label = "Clients/New York/Design";
  var folder = "design-assets";
  
  folder = DriveApp.createFolder(folder);
  
  GmailApp
  .getUserLabelByName(label)
  .getThreads()
  .map(lastMessage)
  .map(extractAttachment)
  .forEach(saveFile(folder));

}

function lastMessage(thread) {
  return thread.getMessages().pop();
}

function extractAttachment(message) {
  var blob = message.getAttachments()[0].copyBlob();
  var filename = message.getFrom() + "." + extension(blob.getName());
  blob.setName(filename);
  return blob;
}

function extension(filename) { 
  return filename.split(".").pop();
}

function saveFile(folder) {
  return function(blob) {
    folder.createFile(blob);
    Logger.log("Saved file " + blob.getName());
  };
}