2 votes

Enregistrez les pièces jointes dans un dossier google drive à partir de chaque identifiant de messagerie respectivement.

J'essaie de créer un script qui peut sauvegarder toutes les pièces jointes envoyées par un identifiant de messagerie de temps en temps dans un dossier de lecteur particulier.

Je suis nouveau sur GAS et j'ai trouvé ce script mais il ne semble pas correspondre à mon besoin. Quelqu'un peut-il m'aider, s'il vous plaît ?

      function GmailToDrive() {
var query = '';
query = 'in:inbox from:noreply@agyo.io has:nouserlabels ';
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();
        var message_body = mesgs[j].getBody();
        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);
            file.setName(renameFile_(attachment, message_body))
            parentFolder.addFile(file);
            root.removeFile(file);
        }
    }
    threads[i].addLabel(label);
}

}

Je n'arrive pas à comprendre l'utilisation de getFolder_(folderName) et checkIfDefinedType_(attachment) ;

Tout ce dont j'ai besoin, c'est ça : Créer un nouveau dossier lorsqu'un nouvel email m'envoie des pièces jointes et les enregistrer dans ce dossier...

1voto

Iamblichus Points 11676

Question :

Le code que vous avez fourni utilise plusieurs fonctions qui ne sont pas définies ( getGmailLabel_ , getFolder_ , checkIfDefinedType_ , renameFile_ ). Leurs définitions devraient probablement se trouver là où vous avez trouvé ce script pour la première fois.

Objectif et solution :

En tout cas, sur la base de l'objectif que vous avez mentionné, aucune de ces fonctions non définies n'est réellement nécessaire :

sauvegarder toutes les pièces jointes envoyées de temps à autre par un identifiant de messagerie dans un dossier de lecteur particulier

  • Pas besoin d'obtenir des étiquettes ( getGmailLabel_ ), puisque vous voulez seulement récupérer les pièces jointes des messages entre certaines dates, et que vous ne voulez pas ajouter d'étiquette à un message.
  • Si vous voulez récupérer les fils entre certaines dates, vous devez utiliser les opérateurs de recherche suivants before: y after: (voir Opérateurs de recherche que vous pouvez utiliser avec Gmail ).
  • Vous pouvez récupérer le dossier souhaité en faisant DriveApp.getFolderById(id) (si vous ne savez pas comment obtenir le dossier id pour un dossier spécifique, cette id fait partie de l'URL du dossier, comme indiqué aquí . Si vous voulez rechercher le nom à la place, utilisez simplement DriveApp.getFoldersByName(nom) et le parcourir en boucle avec tandis que y [suivant()](https://developers.google.com/apps-script/reference/drive/folder-iterator#next()) pour trouver le dossier souhaité.
  • Il n'y a aucune raison d'utiliser getRootFolder car vous pouvez créer le fichier directement dans le dossier de votre choix via Dossier.createFile(blob) .
  • Je ne sais pas pourquoi. checkIfDefinedType_ est utilisé, mais ce n'est pas nécessaire pour créer le fichier correspondant dans Drive.
  • Par défaut, le fichier créé aura le même nom que la pièce jointe, mais dans tous les cas vous pouvez le personnaliser avec file.setName(attachment.getName() + " WHATEVER CUSTOM STRING YOU WANT TO ADD"); .

Extraits de code :

function GmailToDrive() {
  const query = 'from:noreply@agyo.io before:2021-05-04 after:2021-05-01'; // Set sender and dates you prefer
  const threads = GmailApp.search(query);
  const folder = DriveApp.getFolderById("YOUR_FOLDER_ID");
  threads.forEach(thread => {
    const mesgs = thread.getMessages();
    mesgs.forEach(message => {
      const attachments = message.getAttachments();
      attachments.forEach(attachment => {
        const attachmentBlob = attachment.copyBlob();
        const file = folder.createFile(attachmentBlob);
        file.setName(attachment.getName() + " CREATED IN DRIVE");
      });
    });
  });
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X