Le principe est simple :
Le script a été mis à jour le 07/03/2020. La nouveauté étant qu'on place maintenant les fichiers dans un répertoire qui porte la date du jour et l'heure. Cela permet de répartir les nombreuses photos dans différents dossiers. C'est plus pratique.
Rendez-vous sur
https://script.google.com/home
et créer un nouveau script
Effacez la fonction vide d'exemple
Coller ensuite ce code
// 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"));
Lien vers le fichier : cliquez ici
Vous devez alors avoir quelque chose du genre
Rechercher et modifier cette ligne. Il faut remplacer UnSujet par le nom des mails que vous voulez traiter. Pour résumer vos caméras vont envoyer des mails avec un nom de sujet, il faudra le mettre ici.
query = 'in:inbox subject:UnSujet'
Lien vers le fichier : cliquez ici
Donnez un nom au projet
Et sauvegardez le
Allez sur
https://drive.google.com/
et créez un nouveau dossier
Nommez le GmailToDrive
Retourner sur
https://script.google.com
et lancez le script
Il faudra donner des droits d'accès
Le script indique qu'il est en cours d'éxécution
Votre répertoire GmailtoGdrive doit se remplir avec les pièces attachées qui sont dans la boite mail Gmail
Maintenant, pour que le script s'exécute automatiquement à intervalles réguliers, cliquez sur l'horloge
Cliquez sur le lien bleu
Déclenchez par exemple le script toutes les 10 minutes
Si vous voulez modifier ou ajouter les actions faites sur vos messages, cette page vous liste toutes les fonctions existantes
https://developers.google.com/apps-script/reference/gmail/gmail-message
Si vous voulez modifier le script, cette page vous en donne :
https://support.google.com/mail/answer/7190?hl=en
Vous pouvez par exemple modifier le script pour lui dire de ne traiter que les mails qui ont pour sujet CameraIP
Vous pouvez également lui demander d'effacer le mail, une fois son contenu copier dans Google Drive
Notez également qu'au niveau de votre projet Google, vous pouvez afficher l'historique des exécutions
Cela peut vous permettre de contrôler quand vos script s'est exécuté et si il s'est bien exécuté
Encore une autre info :
Gmail impose un quota sur ses serveurs smtp. Vous ne pouvez envoyer que 500 emails par jour.
Si votre caméra passe son temps a envoyer des mails, vous y serez vite.
On trouve l'info ici :
https://support.google.com/mail/answer/22839?hl=fr
Donc si vous atteignez cette limite, en solution on peut installer une passerelle smtp sur un raspberry pi ou sur un serveur que le loue chez OVH, Dedibox ou autre.
Pages Web
Site Web | Description |
---|---|
Google Apps Script Tutorial | Auteur du code source à l'origine |
Article(s) en relation(s)