Google's GMail API download attachments

后端 未结 4 861
清歌不尽
清歌不尽 2021-01-05 13:37

I\'m using the PHP SDK for the new Gmail API. How do I fetch an attachment from an email?

Here is the API documentation, but in this instance, it\'s missing example

4条回答
  •  灰色年华
    2021-01-05 14:31

    maybe someone else will be searching for the simple solution. Please see below script code that can be used as Google Script (Java Script, see start tutorial here: https://script.google.com/home/start ):

    // GLOBALS
    //Array of file extension which you would like to extract to Drive
    var fileTypesToExtract = ['sql','gz'];
    //Name of the folder in google drive i which files will be put
    var folderName = 'BACKUPS';
    //Name of the label which will be applied after processing the mail message
    var labelName = 'SavedToGDrive';
    
    
    
    function GmailToDrive(){
      //build query to search emails
      var query = '';
      
      //uncomment to search by filetypes
      //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;
      
      //search by label
      query = 'label:backups-real-estate-backup';
      //exclude already downloaded mails, so you can repeat running this script 
      if timeout happened
      query = query + ' AND NOT label:savedtogdrive';
      
      var threads = GmailApp.search(query);
      var label = getGmailLabel_(labelName);
      var parentFolder;
      if(threads.length > 0){
        parentFolder = getFolder_(folderName);
      }
      var root = DriveApp.getRootFolder();
      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 isDefinedType = checkIfDefinedType_(attachment);
        	if(!isDefinedType) continue;
        	var attachmentBlob = attachment.copyBlob();
            var file = DriveApp.createFile(attachmentBlob);
            parentFolder.addFile(file);
            root.removeFile(file);
          }
    	}
    	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;
    }
    
    //getDate n days back
    // n must be integer
    function getDateNDaysBack_(n){
      n = parseInt(n);
      var date = new Date();
      date.setDate(date.getDate() - n);
      return Utilities.formatDate(date, Session.getScriptTimeZone(), 'yyyy/MM/dd');
    }
    
    function getGmailLabel_(name){
      var label = GmailApp.getUserLabelByName(name);
      if(!label){
    	label = GmailApp.createLabel(name);
      }
      return label;
    }
    
    //this function will check for filextension type.
    // and return boolean
    function checkIfDefinedType_(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;
    }

    Thanks.

提交回复
热议问题