// GLOBALS //Array of file extension which you would like to extract to Drive var folderName = 'GmailToDrive'; //Nom du répertoire google drive dans lequel seront placés les documents var labelName = 'GmailToDrive'; //Nom du label qui sera appliqué aux mails après opération var now = Utilities.formatDate(new Date(), "GMT+1", "yyyy-MM-dd HH") //Note : Les journaux sont visibles sous Afficher>Journaux ou avec les touches CTRL+Entrée Logger.log('Début du script à ' + Utilities.formatDate(new Date(), "GMT+1", "yyyy/MM/dd HH:mm:ss")); function GmailToDrive(){ //Création d'une requête de recherche de mails query = 'in:inbox subject:UnSujet' //query = 'label:gmailtodrive subject:UnSujet newer_than:1D' Logger.log('Recherche des messages avec le filtre ' + query); var objGmailThreadArray = GmailApp.search(query); //Recherche des messages basée sur le filtre. Cela retourne un tableau var label = getGmailLabel_(labelName); //Pointe ou crée un label nommé labelName if(objGmailThreadArray.length > 0){ //Si la recherche de mails à donné un résultat, on point ou on crée le répertoire cible Logger.log('Il y a ' + objGmailThreadArray.length + ' résultats'); var objGdriveRootFolder = DriveApp.getRootFolder(); //On pointe sur le répertoire racine de Gdrive var folderRacineImages = CreationRepertoire_(objGdriveRootFolder, folderName); //On pointe sur la racine du répertoire qui contient les images var objRepertoireCible = CreationRepertoire_(folderRacineImages, now.toString()); //On pointe sur la racine du répertoire qui contient les images } var objGdriveRootFolder = DriveApp.getRootFolder(); //On pointe sur le répertoire racine de Gdrive for(var UnMail in objGmailThreadArray){ var mesgs = objGmailThreadArray[UnMail].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); //On récupère le fichier contenu dans le mail et on le stocke à la racine de Gdrive. La fonction ne donne pas le choix de la cible objRepertoireCible.addFile(file); //On copie ce même fichier sur le répertoire cible voulu objGdriveRootFolder.removeFile(file); //On efface le fichier qui a été créé à la racine } mesgs[j].moveToTrash(); //Move message to trash } objGmailThreadArray[UnMail].addLabel(label); } } //Cette fonctione cherche un répertoire donné dans Gdrive. Si elle ne le trouve pas, elle le crée function CreationRepertoire_(Parent, folderName){ //var objGdriveRootFolder = DriveApp.getRootFolder(); //On pointe sur le répertoire racine de Gdrive var objMyFolders = Parent.getFoldersByName(folderName); //Gets a collection of all folders that are children of the current folder and have the given name. if(objMyFolders.hasNext()){ folder = objMyFolders.next(); } else{ folder = Parent.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; } Logger.log('Fin du script à ' + Utilities.formatDate(new Date(), "GMT+1", "yyyy/MM/dd HH:mm:ss"));