Comme beaucoup de monde qui utilise GMail, je conserve beaucoup d'emails inutiles comme les différentes newsletters que je reçois, ou les différentes pub que je reçois tous les jours.

Pendant longtemps, régulièrement je faisais un nettoyage manuel de mes emails en faisant des recherche par email en filtrage par email d'envoi.

Plus tard j'ai créé un filtre pour regrouper toutes ces recherches en une.

Maintenant j'ai une stratégie différente, et j'ai automatisé une très grande partie. J'ai déjà présenté cette solution dans un article précédent mais je détail un peu plus et apporte quelques améliorations ici.

  • Tous les emails non tagués de plus de deux ans sont automatiquement supprimés. Donc si je reçois un email que je veux conserver longtemps, je le tague (avec une étoile ou n'importe quel autre signe. Il est nécessaire d'utiliser la version web de GMail pour ça à priori)
  • Pour chaque email récurrent (newsletter et autres), je vais associer à un label en fonction de ce que je veux en faire. Par exemple j'ai créé trois labels (delete-7d, delete-30d et delete-365d) que j'utilise dans des filtres supprimer automatiquement les emails après respectivement 7, 30 et 365 jours.
    Ces filtres ajoutent automatiquement un label "delete/delete-7d", "delete/delete-30d" ou "delete/delete-30d". Bien entendu, si je veux conserver un de ces emails plus longtemps, je fais le taguer avec une étoile
  • J'ai créé un Script Google (https://script.google.com) qui s'exécute automatiquement une fois par jour pour supprimer tous les emails qui ont un lable delete-?? et qui sont plus vieux que la date voulue (pour delete-30d, ce sera tous les emails ayant un label "delete-30d", qui n'ont pas d'étoile, et qui ont été reçu il y a plus de 30 jours)

Voici le script en question, et un peu plus bas une explication détaillée de comment l'intégrer dans https://script.google.com et l'exécuter automatiquement une fois par jours:

var CLEANUP_LABEL_DAYS_REGEXP = new RegExp("^delete/delete-(\\d+)d$", "g");

function cleanupAll() {
  // find labels with the right pattern
  var labels = GmailApp.getUserLabels();
  
  // clear emails for each label
  labels.forEach( function(label) {
    _cleanupLabelDays(label);
  }); 
}

function _cleanupLabelDays(label) {
  // Extract the number of days to keep for the label
  var groups = CLEANUP_LABEL_DAYS_REGEXP.exec(label.getName());
  if(groups !== null) {
    var days = groups[1];
    var searchString = "label:" + label.getName() + " !is:starred older_than:" + days + "d";
    //Logger.log("searchString: " + searchString);

    var deletedMailsCount = 0;
    var threads = null;
    do {
      // Delete threads older than the number of days to keep
      threads = GmailApp.search(searchString, 0, 100);
      GmailApp.moveThreadsToTrash(threads);
      
      deletedMailsCount += threads.length;
    } while(threads.length > 0);      

    Logger.log("Emails deleted in '" + label.getName() + "': " + deletedMailsCount);
  }
}

// Creates a default label structure. You can create your own labels with the number of days required
function createDefaultLabels() {
  GmailApp.createLabel("delete");
  GmailApp.createLabel("delete/delete-3d");
  GmailApp.createLabel("delete/delete-7d");
  GmailApp.createLabel("delete/delete-30d");
}

PS : Ce script est donné à titre d'exemple et n'est absolument pas garanti de fonctionner correctement. L'auteur n'accepte aucune responsabilité si vous perdez des emails à cause de ce script. Comme tout bout de code que vous prenez, comprenez en la teneur avant de l'appliquer.

Instructions détaillées

Lancer Google Script

  • Naviguer sur https://script.google.com (se connecter avec le compte Google désiré)
  • Cliquer sur "Nouveau Script" ou "New Script" en fonction du language de votre navigateur
  • Copier le code ci-dessus et le coller en remplaçant le script existant par défaut et faites Ctrl-S pour sauver le fichier. Google va vous demander le nom du projet. Mettez "Clean GMail" ou un autre nom de votre choix
  • Dans le menu sélectionner Run / Run Function / createDefaultLabels
    Cette fonction va créer des labels par défaut dans votre Gmail sous la forme
  • Lors de la première exécution de ce script, Google va vous demander d'autoriser ce script à s'exécuter
  • Puis exécuter une fois à la main la fonction cleanupAll. Si aucun message d'erreur n’apparaît c'est que tout s'est bien passé. Vu qu'à ce stade aucun email n'est labellisé avec les labels delete-?d, rien ne se sera passé
  • Il vous faut maintenant automatiser l'exécution de ce script, retournez sur la page d'accueil de Google Scripts
  • Créez un trigger

Voici la configuration de mon trigger

  • Il ne vous reste plus qu'à labelliser vos emails et à créer les filtre automatiques pour le faire

Les emails "supprimés" par le script se retrouve dans Bin, qui est géré par Google et les emails sont supprimés effectivement après 30 jours.