Skip to content

Instantly share code, notes, and snippets.

@Carolusian
Created December 24, 2015 15:12
Show Gist options
  • Save Carolusian/9021828f284b31e1440c to your computer and use it in GitHub Desktop.
Save Carolusian/9021828f284b31e1440c to your computer and use it in GitHub Desktop.
Save Gmail Attachments to Google Drive
// 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