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

Encore une fois, je suis ici pour parler de productivité et d’automatisation dans Gmail. Cette fois-ci, nous passons en mode geek et utiliserons Google Apps Script pour améliorer votre expérience Gmail.

Gmail dispose de nombreux paramètres intégrés que vous pouvez modifier pour automatiser les tâches et augmenter la productivité. Cependant, il a ses limites et de nombreuses fonctionnalités n’offrent pas suffisamment d’options de personnalisation. C’est ici que vous pouvez prendre les choses en main à l’aide de Google Apps Script.

Avec lui, vous pouvez créer des scripts personnalisés capables d’effectuer des tâches que Gmail ne peut pas effectuer de manière native. De plus, vous pouvez définir des déclencheurs temporels pour automatiser ces scripts.

Pour commencer, je répertorie quelques scripts utiles qui amélioreront sûrement votre expérience Gmail. Je me suis assuré que chaque script résout automatiquement les problèmes courants, tels que les doublons ou la création automatique d’un nouveau dossier. Par conséquent, certains scripts peuvent sembler un peu plus longs que leur objectif prévu.

Créer un script dans Google Apps Script

Avant de commencer à appliquer et à personnaliser ces scripts, vous devez savoir comment créer un script dans Google Apps Script et l’exécuter. Voici comment:

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

Ici, vous devez supprimer tout le code déjà écrit et copier/coller le script que je vais vous fournir. Ensuite, cliquez sur le bouton Enregistrer pour enregistrer le script.

Pour exécuter le script, cliquez sur le bouton Exécuter juste à côté de Enregistrer. Il vous sera demandé de donner des autorisations et il y aura un avertissement indiquant que le script n’est pas vérifié. Vous pouvez ignorer l’avertissement et accorder des autorisations puisque le script est destiné à un usage personnel et que Google ne l’a pas examiné.

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

Configurer un déclencheur

Beaucoup de ces scripts fonctionnent mieux lorsqu’ils sont déclenchés automatiquement. Heureusement, Google Apps Script dispose également d’une section permettant de créer des déclencheurs temporels pour chaque script afin qu’ils s’exécutent automatiquement.

Cependant, avant de vous parler de la création d’un déclencheur, sachez que Google Apps Script a des quotas limités selon que vous êtes abonné ou non au Forfait Google Workspace ou non. Si vous avez trop de scripts exécutés à la fois et trop fréquemment, vous risquez d’atteindre le quota quotidien qui arrêtera le service pour le moment.

Même si vous avez la possibilité d’exécuter des scripts toutes les minutes, cela représenterait une énorme perte pour votre quota quotidien. Assurez-vous de définir uniquement une minuterie qui effectue le travail de manière fiable.

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

Ici, vous pouvez choisir une minuterie en minutes jusqu’à plusieurs mois et l’intervalle. Vous pouvez également sélectionner une date et une heure fixes pour exécuter le script une seule fois à cette heure précise. Une fois que tous sont sélectionnés, cliquez sur Enregistrer pour créer le déclencheur.

Si vous n’avez pas donné l’autorisation d’exécuter le script comme je vous l’ai déjà dit, il vous sera alors demandé de donner l’autorisation avant de créer le déclencheur.

En fonction de votre sélection, le déclencheur fonctionnera en continu. S’il rencontre un problème, il vous en informera avec l’erreur survenue.

Voyons maintenant quelques exemples pratiques de la façon dont vous pouvez utiliser 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 permet de planifier des e-mails, mais pas des e-mails récurrents. Que vous souhaitiez rappeler quelque chose à quelqu’un ou que vous souhaitiez vous assurer que votre courrier électronique ne soit pas oublié. Ce script simple envoie un e-mail à l’adresse fournie avec le sujet et le message que vous fournissez. Vous pouvez ensuite configurer un déclencheur récurrent à partir de l’option Déclencheurs.

Dans le script, modifiez la section du destinataire, de l’objet et du message avec les détails réels. Assurez-vous que les guillemets autour de l’exemple de texte restent. Par exemple, le sujet devrait ressembler à ceci :

var subject = "Important Reminder";

Étant donné que les déclencheurs ont une limite maximale d’un mois, le message récurrent doit être envoyé une fois par mois. Malheureusement, cela signifie que vous ne pouvez pas l’utiliser pour envoyer des vœux pour des occasions qui se produisent chaque année.

Filtrer les e-mails avec des liens vers une étiquette

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 le corps sont généralement plus importants. Que vous receviez des rapports d’un collègue ou que vous soyez abonné à des newsletters qui envoient des ressources spécifiques, catégoriser les emails avec des liens peut s’avérer très utile.

Ce script examine tous les e-mails non lus de votre compte Gmail et sépare ceux contenant des liens dans le corps de l’e-mail vers une nouvelle étiquette nommée « E-mails avec liens ». Par défaut, il recherchera les e-mails partout dans Gmail, mais vous pouvez affiner la recherche en modifiant le paramètre var threads = GmailApp.search(‘is:unread’); doubler. Vous trouverez ci-dessous quelques façons de le modifier :

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

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

Recherchez tous les e-mails lus/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 façon dont vous pouvez modifier le script pour affiner les 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 d’e-mails.

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 plus anciens qu’une période spécifique. Le script ici recherchera tous les e-mails dans Gmail datant de plus de 30 jours et les enverra dans la corbeille. Vous pouvez modifier la partie « older_than : 30d » pour spécifier l’ancien e-mail que vous souhaitez supprimer, comme « older_than : 180d ».

Si vous souhaitez plutôt supprimer les e-mails d’une étiquette spécifique, vous pouvez modifier la partie Gmail.App.search pour inclure l’étiquette. Comme ça:

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

Pour rendre le processus automatique, créez un déclencheur qui exécute automatiquement le script tous les quelques jours. En fonction de l’ancienneté des e-mails que vous souhaitez supprimer, je suis sûr qu’un déclencheur hebdomadaire ou même mensuel conviendra.

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 recherchera tous les e-mails dans Gmail, copiera le nom et l’adresse e-mail des expéditeurs/destinataires et les enregistrera dans Google Sheets. Cela peut avoir de nombreuses utilisations, comme créer une liste de diffusion pour le marketing par courrier électronique ou créer un enregistrement de toutes les personnes qui vous contactent.

Cependant, la création de ce script est un peu différente des autres puisque vous devez ouvrir Google Apps Script depuis Google Sheets afin qu’il puisse identifier la feuille. Cependant, cela ne doit être fait que pour la première fois. Voici comment:

Ouvrir une nouvelle feuille dans Feuilles Google. Cliquez ici sur Extensions dans le menu ci-dessus, puis sélectionnez Apps Script. Cela ouvrira Google Apps Script et vous pourrez ajouter le script et l’exécuter comme je l’ai démontré précédemment.

Le script créera une nouvelle feuille avec le nom « Adresses e-mail » avec le nom et l’adresse e-mail écrits dans la même cellule. Vous n’aurez plus besoin d’ouvrir la feuille à l’avenir pour chaque déclencheur. Toute nouvelle adresse email sera mise à jour dans la fiche à la fin sans aucun doublon.

Selon 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);
        }
      }
    }
  }
}

Un script très pratique si vous recevez souvent des pièces jointes importantes par e-mail. Cela permettra non seulement de conserver les pièces jointes, mais également de les regrouper dans une bien meilleure interface pour les gérer.

Ce script est codé 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’est pas disponible. J’ai également évité d’utiliser des noms pour vérifier les fichiers en double, 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 sais que tout le monde ne souhaite pas enregistrer uniquement les nouvelles pièces jointes et peut également souhaiter les pièces jointes des e-mails déjà reçus. Pour cela, vous trouverez ci-dessous un script modifié qui suit les mêmes règles mais enregistre à la place les pièces jointes des e-mails actuellement présents. Cependant, la sauvegarde prendra 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);
        }
      }
    }
  }
}

Obtenez 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="Daily Quote";
  var message = `Here is your daily quote:\n\n"${quote}"\n\n- ${author}`;

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

Il n’a peut-être pas d’utilité directe dans votre travail ou dans la gestion de vos e-mails, mais c’est idéal pour se motiver à tout donner chaque jour directement dans la boîte de réception. Lorsqu’il est correctement configuré, ce script utilisera l’API They Said So pour vous envoyer sa citation inspirante quotidienne par e-mail. Voici comment le configurer :

Tout d’abord, vous avez besoin d’une clé API personnelle de They Said So. Sur le Ils l’ont dit API page, vous pouvez créer un compte gratuit pour obtenir la clé. Il donne 5 appels gratuits, ce qui est largement suffisant pour un devis journalier.

Une fois que vous avez la clé, remplacez la partie YOUR_API_KEY par la clé réelle que vous avez obtenue de They Said So. Vous devez également remplacer le [email protected] séparez-vous de votre adresse e-mail réelle ou de celle de quelqu’un d’autre si vous souhaitez la configurer pour quelqu’un d’autre.

Il ne vous reste plus qu’à configurer un déclencheur qui s’exécute quotidiennement, car son exécution plus tôt ne fera que renvoyer le devis du jour en cours.

Derniers mots

Personnellement, je n’ai eu aucun problème à exécuter tous ces scripts ensemble, et je n’atteins pas non plus le quota quotidien. Je suis sûr que tout ira bien aussi, à condition de ne pas utiliser de déclencheurs trop agressifs. Vous devez également vérifier ces scripts pour vous assurer qu’aucun script ne rencontre d’erreurs.