Is there any google API which could save gmail mes

2019-06-12 16:19发布

问题:

How can I save gmail message attachments to google drive. Is there any such google API?

回答1:

To add details, here is the main page of what Google APIs you can use. As Gaurav mentioned, you can use Drive and Gmail API. Here is a snippet using Apps Script:

// GLOBALS
//Array of file extension which you would like to extract to Drive
var fileTypesToExtract = ['jpg', 'tif', 'png', 'gif', 'bmp', 'svg'];
//Name of the folder in google drive i which files will be put
var folderName = 'GmailToDrive';
//Name of the label which will be applied after processing the mail message
var labelName = 'GmailToDrive';



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 has:nouserlabels ' + query;
  var threads = GmailApp.search(query);
  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 isImageType = checkIfImage_(attachment);
     if(!isImageType) continue;
     var attachmentBlob = attachment.copyBlob();
     var file = DocsList.createFile(attachmentBlob);
     file.addToFolder(parentFolder);
   }
 }
 threads[i].addLabel(label);
  }
}

//This function will get the parent folder in Google drive
function getFolder_(folderName){
  var folder;
  try {folder = DocsList.getFolder(folderName)}
  catch(e){ folder = DocsList.createFolder(folderName);}
  return folder;
}

//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 checkIfImage_(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;
}

Hope this helps.