6 projets de script Google Apps pour dynamiser votre expérience Gmail



Je reviens une nouvelle fois pour aborder la question de la productivité et de l’automatisation au sein de Gmail. Cette fois-ci, nous allons adopter une approche plus technique en utilisant Google Apps Script afin d’optimiser votre expérience Gmail.

Gmail intègre une multitude de paramètres que vous pouvez ajuster pour automatiser des actions et améliorer votre efficacité. Toutefois, ces paramètres présentent des limites, et de nombreuses fonctionnalités manquent d’options de personnalisation suffisantes. C’est là que Google Apps Script peut vous être d’une grande utilité.

Grâce à cet outil, vous pouvez concevoir des scripts personnalisés capables de réaliser des tâches que Gmail ne peut pas exécuter nativement. De plus, vous pouvez établir des déclencheurs temporels pour automatiser l’exécution de ces scripts.

Pour commencer, je vous propose une liste de scripts pratiques qui amélioreront sans aucun doute votre utilisation de Gmail. J’ai veillé à ce que chaque script résolve de manière automatique des problèmes courants, tels que les doublons ou la création automatique de nouveaux dossiers. Par conséquent, certains scripts peuvent sembler légèrement plus longs que leur fonction prévue.

Comment créer un script dans Google Apps Script

Avant de commencer à appliquer et à personnaliser ces scripts, il est essentiel de comprendre comment créer un script dans Google Apps Script et comment l’exécuter. Voici les étapes à suivre :

Ouvrez Google Apps Script et cliquez sur le bouton « Nouveau projet » situé dans le panneau de gauche.

Dans l’éditeur de script, supprimez le code préexistant et copiez/collez le script que je vais vous fournir. Ensuite, cliquez sur le bouton « Enregistrer » pour sauvegarder le script.

Pour lancer le script, cliquez sur le bouton « Exécuter » qui se trouve à côté du bouton « Enregistrer ». Vous serez invité à accorder des autorisations, et un avertissement vous informera que le script n’est pas vérifié. Vous pouvez ignorer cet avertissement et accorder les autorisations, car le script est destiné à un usage personnel et n’a pas été examiné par Google.

Voilà, le script s’exécutera et le journal d’exécution indiquera s’il a été exécuté avec succès ou non.

Configurer un déclencheur

De nombreux scripts fonctionnent de manière plus efficace lorsqu’ils sont déclenchés automatiquement. Heureusement, Google Apps Script inclut une section permettant de créer des déclencheurs temporels pour chaque script, de manière à ce qu’ils s’exécutent de façon automatique.

Cependant, avant de vous montrer comment créer un déclencheur, il est important de savoir que Google Apps Script impose des quotas limités, en fonction de votre abonnement au Forfait Google Workspace ou non. Si vous exécutez un grand nombre de scripts simultanément et trop fréquemment, vous risquez d’atteindre le quota quotidien, ce qui entraînera l’arrêt temporaire du service.

Même si vous avez la possibilité d’exécuter des scripts toutes les minutes, cela représenterait une utilisation importante de votre quota quotidien. Assurez-vous de définir une fréquence d’exécution qui permette un fonctionnement fiable de vos scripts.

Pour créer un déclencheur, cliquez sur « Déclencheurs » dans le panneau de gauche, pendant que votre script est ouvert, puis cliquez sur le bouton « Ajouter un déclencheur ».

Vous pouvez ici choisir une minuterie allant de quelques minutes à plusieurs mois, ainsi que l’intervalle souhaité. Vous pouvez également choisir une date et une heure fixes pour exécuter le script une seule fois. Une fois toutes les options sélectionnées, cliquez sur « Enregistrer » pour créer le déclencheur.

Si vous n’avez pas accordé l’autorisation d’exécuter le script, comme je l’ai expliqué précédemment, vous serez invité à le faire avant de pouvoir créer le déclencheur.

En fonction de vos paramètres, le déclencheur fonctionnera en continu. En cas de problème, il vous avertira en affichant l’erreur rencontrée.

Passons maintenant à quelques exemples concrets d’utilisation de Google Apps Script pour automatiser vos tâches Gmail.

Envoyer des e-mails récurrents

function sendRecurringEmail() {
  var recipient = "[email protected]";
  var subject = "Your subject here";
  var message = "Your custom message here";

  GmailApp.sendEmail(recipient, subject, message);
}

Gmail vous offre la possibilité de programmer des e-mails, mais pas de définir des e-mails récurrents. Que vous souhaitiez rappeler quelque chose à une personne ou vous assurer que votre message ne tombe pas dans l’oubli, ce script simple vous permet d’envoyer un e-mail à l’adresse indiquée, avec le sujet et le message de votre choix. Vous pouvez ensuite configurer un déclencheur récurrent à partir de l’option « Déclencheurs ».

Dans le script, modifiez les sections correspondant au destinataire, au sujet et au message avec les informations souhaitées. Veillez à conserver les guillemets autour de l’exemple de texte. Par exemple, le sujet devrait ressembler à ceci :

var subject = "Rappel Important";

Étant donné que les déclencheurs ont une limite d’un mois maximum, l’envoi du message récurrent doit être programmé une fois par mois. Malheureusement, cela signifie que vous ne pourrez pas l’utiliser pour envoyer des messages de vœux annuels.

Filtrer les e-mails contenant des liens vers un libellé

function processUnreadEmailsWithLinks() {
  var labelName="Emails with Links";
  var label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    label = GmailApp.createLabel(labelName);
  }
  var threads = GmailApp.search('is:unread');
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var body = message.getBody();
      if (bodyContainsLinks(body)) {
        label.addToThread(threads[i]);
      }
    }
  }
}

function bodyContainsLinks(body) {
  var regex = /https?:\/\/[^\s<>"']+/g;
  return regex.test(body);
}

Les e-mails contenant des liens dans leur corps sont généralement considérés comme plus importants. Que vous receviez des rapports d’un collègue ou que vous soyez abonné à des newsletters contenant des ressources spécifiques, il peut être très utile de catégoriser les e-mails contenant des liens.

Ce script analyse tous les e-mails non lus de votre compte Gmail et classe ceux qui contiennent des liens dans le corps du message dans un nouveau libellé nommé « Emails avec liens ». Par défaut, il effectuera la recherche dans l’ensemble de Gmail, mais vous pouvez affiner la recherche en modifiant le paramètre var threads = GmailApp.search(‘is:unread’);. Voici quelques exemples de modification possible :

Rechercher uniquement dans la boîte de réception : var threads = GmailApp.search(‘in:inbox is:unread’);

Rechercher dans d’autres libellés : var threads = GmailApp.search(‘in:inbox is:unread OR in:promotions is:unread OR in:important is:unread’);

Rechercher tous les e-mails (lus ou non lus) dans la boîte de réception : var threads = GmailApp.search(‘in:inbox’);

Rechercher les e-mails d’un expéditeur spécifique : var threads = GmailApp.search(‘from :[email protected]‘);

Ces exemples devraient vous donner une idée de la manière dont vous pouvez modifier le script pour affiner votre recherche d’e-mails contenant des liens. De plus, je pense que la mise en place d’un déclencheur quotidien sera plus que suffisante pour ce type de tri.

Supprimer automatiquement les anciens e-mails

function deleteOldEmails() {
  var threads = GmailApp.search('older_than:30d');
  for (var i = 0; i < threads.length; i++) {
    threads[i].moveToTrash();
  }
}

Si vous ne souhaitez pas conserver les anciens e-mails, vous pouvez utiliser ce script pour supprimer les e-mails datant d’une période spécifique. Le script recherchera tous les e-mails de Gmail datant de plus de 30 jours et les placera dans la corbeille. Vous pouvez modifier la partie « older_than:30d » pour spécifier la période d’ancienneté des e-mails que vous souhaitez supprimer, par exemple en indiquant « older_than:180d ».

Si vous souhaitez plutôt supprimer les e-mails d’un libellé particulier, vous pouvez modifier la partie Gmail.App.search pour inclure le libellé. Voici un exemple :

var threads = GmailApp.search(‘in:inbox Old_than:30d’);

Pour automatiser le processus, créez un déclencheur qui exécutera automatiquement le script tous les quelques jours. En fonction de l’ancienneté des e-mails que vous souhaitez supprimer, je suis certain qu’un déclencheur hebdomadaire, voire mensuel, sera suffisant.

Enregistrer toutes les adresses e-mail dans Google Sheets

function getEmailAddresses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = "Email Addresses";
  var sheet = ss.getSheetByName(sheetName);
  
  if (!sheet) {
    sheet = ss.insertSheet(sheetName);
    sheet.appendRow(["Email Address"]);
  }
  
  var threads = GmailApp.getInboxThreads();
  var emailAddresses = [];
  
  var existingData = sheet.getDataRange().getValues();
  if (existingData.length > 1) {
    var existingEmailAddresses = existingData.slice(1).flat();
  } else {
    var existingEmailAddresses = [];
  }
  
  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    for (var j = 0; j < messages.length; j++) {
      var emailAddress = messages[j].getFrom();
      if (emailAddresses.indexOf(emailAddress) === -1 && existingEmailAddresses.indexOf(emailAddress) === -1) {
        emailAddresses.push(emailAddress);
      }
    }
  }
  
  for (var k = 0; k < emailAddresses.length; k++) {
    sheet.appendRow([emailAddresses[k]]);
  }
}

Ce script analysera tous les e-mails de votre compte Gmail, copiera le nom et l’adresse e-mail des expéditeurs et des destinataires, puis les enregistrera dans Google Sheets. Cela peut être utile pour diverses raisons, comme la création d’une liste de diffusion pour le marketing par e-mail ou la création d’un registre de toutes les personnes qui vous contactent.

Cependant, la création de ce script est légèrement différente des autres, car vous devez ouvrir Google Apps Script à partir de Google Sheets afin que le script puisse identifier la feuille. Néanmoins, cette opération n’est à effectuer que la première fois. Voici comment procéder :

Ouvrez une nouvelle feuille dans Google Sheets. Dans le menu du haut, cliquez sur « Extensions », puis sélectionnez « Apps Script ». Google Apps Script s’ouvrira et vous pourrez ajouter le script et l’exécuter, comme je vous l’ai montré précédemment.

Le script créera une nouvelle feuille nommée « Adresses e-mail » dans laquelle seront enregistrés le nom et l’adresse e-mail de chaque expéditeur ou destinataire dans la même cellule. Vous n’aurez plus besoin d’ouvrir la feuille à chaque déclencheur. Toute nouvelle adresse e-mail sera ajoutée à la fin de la feuille, sans doublons.

En fonction de la fréquence à laquelle vous recevez des e-mails de nouveaux expéditeurs, un déclencheur quotidien ou hebdomadaire devrait être suffisant.

Enregistrer automatiquement les pièces jointes des e-mails sur Google Drive

function onNewEmail(e) {
  var threads = GmailApp.getInboxThreads(0, 1);
  var messages = threads[0].getMessages();
  
  var folderName = "Email Attachments";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var folder;

  if (folderIterator.hasNext()) {
    folder = folderIterator.next();
  } else {
    folder = DriveApp.createFolder(folderName);
  }
  
  for (var i = 0; i < messages.length; i++) {
    var message = messages[i];
    
    if (message.getAttachments().length > 0) {
      var attachments = message.getAttachments();
      
      for (var j = 0; j < attachments.length; j++) {
        var attachment = attachments[j];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = folder.getFiles();

        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(attachment);
        }
      }
    }
  }
}

Il s’agit d’un script très pratique si vous recevez souvent des pièces jointes importantes par e-mail. Il vous permettra non seulement de conserver ces pièces jointes, mais également de les regrouper dans une interface plus pratique pour les gérer.

Ce script est conçu pour fonctionner uniquement sur les nouveaux e-mails que vous recevrez après sa première exécution. Il créera automatiquement un nouveau dossier nommé « Pièces jointes aux e-mails » dans Google Drive s’il n’existe pas déjà. J’ai également choisi d’éviter d’utiliser les noms pour vérifier les doublons, car ils peuvent être identiques pour différents fichiers. Le script recherche à la place une valeur de hachage MD5 unique en fonction du contenu du fichier.

Je suis conscient que certaines personnes souhaitent enregistrer non seulement les nouvelles pièces jointes, mais également celles des e-mails déjà reçus. Vous trouverez ci-dessous un script modifié qui suit les mêmes règles, mais qui enregistre toutes les pièces jointes des e-mails déjà reçus. Toutefois, la sauvegarde peut prendre un certain temps en fonction du nombre de pièces jointes dont vous disposez.

function saveAllAttachmentsToDrive() {
  var folderName = "Email Attachments";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var folder;
  
  if (folderIterator.hasNext()) {
    folder = folderIterator.next();
  } else {
    folder = DriveApp.createFolder(folderName);
  }

  var threads = GmailApp.getInboxThreads();

  for (var i = 0; i < threads.length; i++) {
    var messages = threads[i].getMessages();
    
    for (var j = 0; j < messages.length; j++) {
      var message = messages[j];
      var attachments = message.getAttachments();
      
      for (var k = 0; k < attachments.length; k++) {
        var attachment = attachments[k];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = folder.getFiles();
        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(attachment);
        }
      }
    }
  }
}

Recevoir une citation inspirante quotidienne

function sendDailyQuoteEmail() {
  var apiKey = 'YOUR_API_KEY';
  var endpoint="https://quotes.rest/qod";

  var response = UrlFetchApp.fetch(endpoint, {
    headers: {
      'X-TheySaidSo-Api-Secret': apiKey
    }
  });

  var data = JSON.parse(response.getContentText());
  var quoteContents = data.contents.quotes[0];
  var quote = quoteContents.quote;
  var author = quoteContents.author;

  var recipient="[email protected]";
  var subject="Citation du jour";
  var message = `Voici votre citation quotidienne:\n\n"${quote}"\n\n- ${author}`;

  GmailApp.sendEmail(recipient, subject, message);
}

Ce script n’a peut-être pas d’utilité directe dans votre travail ou la gestion de vos e-mails, mais il est idéal pour vous motiver et vous inciter à donner le meilleur de vous-même chaque jour, directement dans votre boîte de réception. Une fois correctement configuré, ce script utilisera l’API They Said So pour vous envoyer chaque jour une citation inspirante par e-mail. Voici comment le configurer :

Tout d’abord, vous aurez besoin d’une clé API personnelle auprès de They Said So. Sur la page API They Said So, vous pouvez créer un compte gratuit pour obtenir cette clé. Le compte gratuit vous donne droit à 5 appels, ce qui est largement suffisant pour une citation quotidienne.

Une fois que vous avez votre clé, remplacez la partie « YOUR_API_KEY » par la clé réelle que vous avez obtenue auprès de They Said So. Vous devez également remplacer l’adresse [email protected] par votre propre adresse e-mail ou celle de quelqu’un d’autre si vous souhaitez configurer ce script pour une autre personne.

Il ne vous reste plus qu’à configurer un déclencheur qui s’exécutera quotidiennement, car une exécution plus fréquente ne fera que renvoyer la citation du jour actuel.

Conclusion

Personnellement, je n’ai eu aucun problème à exécuter tous ces scripts en même temps, et je n’ai jamais atteint le quota quotidien. Je suis certain que tout se passera bien pour vous également, à condition de ne pas utiliser de déclencheurs trop fréquents. Vous devez également vérifier régulièrement l’exécution de ces scripts pour vous assurer qu’aucun d’eux ne rencontre d’erreurs.