Created
December 24, 2015 15:12
-
-
Save Carolusian/9021828f284b31e1440c to your computer and use it in GitHub Desktop.
Save Gmail Attachments to Google Drive
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// GLOBALS | |
//Array of file extension which you would like to extract to Drive | |
var fileTypesToExtract = ['zip']; | |
//Name of the folder in google drive i which files will be put | |
var folderName = 'Adx Reports'; | |
//Name of the label which will be applied after processing the mail message | |
var labelName = 'Adx'; | |
//Words contained in the subject of the email | |
var subjectWording = "Ad Exchange Scheduled Report " | |
function GmailToDrive(){ | |
//build query to search emails | |
var query = ''; | |
//filename:jpg OR filename:tif OR filename:gif OR fileName:png OR filename:bmp OR filename:svg'; //'after:'+formattedDate+ | |
for(var i in fileTypesToExtract){ | |
query += (query == '' ?('filename:'+fileTypesToExtract[i]) : (' OR filename:'+fileTypesToExtract[i])); | |
} | |
query = 'in:inbox is:unread subject:' + subjectWording + ' ' + query; | |
Logger.log('The query string is:' + query); | |
var threads = GmailApp.search(query); | |
Logger.log('We found ' + threads.length + ' emails for you.'); | |
var label = getGmailLabel_(labelName); | |
var parentFolder; | |
if(threads.length > 0){ | |
parentFolder = getFolder_(folderName); | |
} | |
for(var i in threads){ | |
var mesgs = threads[i].getMessages(); | |
for(var j in mesgs){ | |
//get attachments | |
var attachments = mesgs[j].getAttachments(); | |
for(var k in attachments){ | |
var attachment = attachments[k]; | |
var isZipType = checkIfZip_(attachment); | |
if(!isZipType) continue; | |
var attachmentBlob = attachment.copyBlob(); | |
var file = DriveApp.createFile(attachmentBlob); | |
var fileName = getMessageDateStr_(mesgs[j]) + ' ' + file.getName(); | |
file.makeCopy(fileName, parentFolder); | |
file.setTrashed(true); | |
Logger.log('File `' + fileName +'` has been uploaded to folder ' | |
+ '`' + parentFolder.getName() +'`'); | |
} | |
mesgs[i].markRead(); | |
} | |
threads[i].addLabel(label); | |
} | |
} | |
//This function will get the parent folder in Google drive | |
function getFolder_(folderName){ | |
var folder; | |
var fi = DriveApp.getFoldersByName(folderName); | |
if(fi.hasNext()){ | |
folder = fi.next(); | |
} | |
else{ | |
folder = DriveApp.createFolder(folderName); | |
} | |
return folder; | |
} | |
// Get a date string in 'yyyymmdd' format | |
function getMessageDateStr_(message) { | |
return message.getDate().toISOString().slice(0, 10).replace(/-/g, ''); | |
} | |
//getDate n days back | |
// n must be integer | |
function getDateNDaysBack_(n){ | |
n = parseInt(n); | |
var today = new Date(); | |
var dateNDaysBack = new Date(today.valueOf() - n*24*60*60*1000); | |
return dateNDaysBack; | |
} | |
function getGmailLabel_(name){ | |
var label = GmailApp.getUserLabelByName(name); | |
if(label == null){ | |
label = GmailApp.createLabel(name); | |
} | |
return label; | |
} | |
//this function will check for filextension type. | |
// and return boolean | |
function checkIfZip_(attachment){ | |
var fileName = attachment.getName(); | |
var temp = fileName.split('.'); | |
var fileExtension = temp[temp.length-1].toLowerCase(); | |
if(fileTypesToExtract.indexOf(fileExtension) != -1) return true; | |
else return false; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment