/ trucs et astuces

Nettoyer ses emails Gmail

Le problème

Pendant des années après avoir créé un compte google mail j'ai conservé tous mes emails soit dans mon inbox soit simplement en les archivant (i.e. en enlevant le label inbox).

D'une part j'avais décidé que peu importe si google indexait mes emails, et d'autre part que c'était très pratique pour se souvenir de choses intéressantes passées de conserver tout les emails. J'ai aussi du coup commencé à m'envoyer des emails avec des mémos. Je m'en suis servi comme d'Evernote, avant l'heure.

Avec le temps, mes recherches d'emails ont commencé à prendre beaucoup de temps, avec tous ces emails, souvent inutiles, amassés. J'ai inventé des stratégies de nettoyage.

Mais après bien des ajustements, et du progrès, je n'étais pas satisfait, et petit à petit ma boite email GMail grossissait quand même au point d'être à 90% pleine.

J'ai commencé à décidé de supprimer tout ce qui était plus vieux de deux ans.

Mais j'ai perdu mon historique intéressant. Il me fallait une autre solution.

Ma solution

Après avoir discuté avec pas mal de monde sur une stratégie de nettoyage des emails, quelqu'un m'a indiqué un moyen qui m'a paru très efficace: tagger les emails automatiquement pour être supprimés automatiquement après un laps de temps donné.

Donc par exemple, tous les emails venant de telle mailing list serons supprimés après 30 jours en plaçant un tag 'delete-30d'. Mais cette autre mailing list, après 7 jours avec le tag 'delete-7d'.

Il arrivait à faire ça simplement avec une combinaison de règle de filtrage google mail et un petit script google qu'il m'a donné.

C'était bien, mais il me paraissait manquer quelque chose d'important. Et si un des emails en question étaient suffisamment intéressant pour que je décide de le garder? En général, je mets un drapeau d'une couleur différente en face des emails importants ou intéressants.

J'ai donc modifié le script pour supprimer en effet les emails taggés "delete-30d" après 30 jours ("days"), si et seulement si ils n'ont pas d'étoile (ou autre signe différenciant).

Préparation

Créer des labels

  • 'delete/delete-1d'
  • 'delete/delete-7d'
  • 'delete/delete-30d'

(Note : le script extrait automatiquement le nombre de jours par expression régulière.)

Créer des règles de filtrage

Créer des règles de filtrage qui ajoutent automatiquement des tags aux emails, en fonction de vos critères
Personnellement j'utilise pas mal un règle du style

Si
from:{xyz@example.com blabla.com}
Alors
Tag 'delete-30d'

La notation avec '{' et '}' indique "élément 1 OU élément 2 OU ..."

Le Script

Voici le script que j'ai intégré dans https://script.google.com et programmé pour être exécuté tous les jours une fois (via les triggers de google script).

var CLEANUP_LABEL_DAYS_REGEXP = new RegExp("^delete/delete-(\\d+)d$", "g"); // "i" is for case insensitive

function cleanupAll() {
  var labels = GmailApp.getUserLabels();
  labels.forEach( function(label) {
    cleanupLabelDays(label);
  }); 
}

function cleanupLabelDays(label) {
  var groups = CLEANUP_LABEL_DAYS_REGEXP.exec(label.getName());
  if(groups !== null) {
    var days = groups[1];
    //Logger.log("cleanup(" + days + ", " + label.getName() + ")");

    var maxDate = new Date();
    maxDate.setDate(maxDate.getDate()-days);

    var threads = label.getThreads();
    var deletedMails = 0;
    threads.forEach( function(thread) {
      if (!thread.hasStarredMessages() && thread.getLastMessageDate() < maxDate){
        thread.moveToTrash();
        deletedMails++;
      }
    });
  
    Logger.log("Emails deleted in '" + label.getName() + "': " + deletedMails);
  }
}