,

Reprenez le contrôle de votre boîte Gmail grâce à un script !

Vous aussi, vous êtes submergé par les newsletters, les offres promotionnelles et les publicités ? Ces e-mails, souvent appelés « graymail », ne sont pas du spam, mais ils encombrent votre boîte de réception et noient les messages importants.

Et si vous pouviez automatiser le tri de ces e-mails ? Grâce à Google Apps Script, un outil puissant (et gratuit) intégré à votre compte Google, c’est possible.

Nous allons voir comment mettre en place un script simple qui va, toutes les heures, scanner vos nouveaux e-mails et déplacer automatiquement toutes les publicités dans un dossier spécifique.

Ce que fait exactement ce script

Le script que nous allons utiliser est un « filtre intelligent » basé sur des mots-clés. Voici sa logique :

  1. Il s’exécute automatiquement : Nous allons le configurer pour qu’il se lance toutes les heures.
  2. Il scanne les nouveaux e-mails : Il ne s’intéresse qu’aux e-mails non lus dans votre boîte de réception principale.
  3. Il cherche des mots-clés : Il analyse le sujet et le corps de chaque e-mail à la recherche de termes que vous définissez (par exemple : « promotion », « newsletter », « gratuit », « offre spéciale »).
  4. Il trie et archive : S’il trouve un mot-clé, il applique un libellé (par exemple « Pub à Vérifier »), marque l’e-mail comme lu et, surtout, l’archive (il disparaît de votre boîte de réception).

Résultat : votre boîte de réception reste propre et dédiée aux e-mails importants. Vos publicités, elles, sont bien rangées dans leur libellé, prêtes à être consultées plus tard (ou jamais !).

Comment l’installer ? (5 minutes chrono)

Ne vous inquiétez pas, il n’y a pas besoin d’être développeur. Suivez simplement ces étapes.

Étape 1 : Ouvrir l’éditeur de scripts

  1. Rendez-vous sur script.google.com.
  2. Cliquez sur Nouveau projet en haut à gauche.
  3. Donnez un nom à votre projet (ex: « Filtre Anti-Pub Gmail »).

Étape 2 : Coller le code

  1. Effacez tout le contenu présent dans la fenêtre de l’éditeur (généralement function myFunction() { ... }).
  2. Copiez l’intégralité du script francophone fourni au début de cet article.
  3. Collez-le dans l’éditeur de script.
// --- CONFIGURATION ---

// Définissez vos règles de tri.
// Le script appliquera le libellé de la PREMIÈRE règle correspondante.
// L'ordre est donc important si un e-mail peut correspondre à plusieurs règles.
const REGLES_DE_TRI = [
  {
    nomLibelle: "Promos Shopping",
    motsCles: [
      "promotion", 
      "réduction", 
      "soldes", 
      "livraison gratuite", 
      "code promo", 
      "dernière chance",
      "ventes privées"
    ]
  },
  {
    nomLibelle: "Newsletters Tech",
    motsCles: [
      "newsletter",
      "tech", 
      "gadget", 
      "IA", 
      "mise à jour logicielle", 
      "nouveau smartphone",
      "deep learning"
    ]
  },
  {
    nomLibelle: "Réseaux Sociaux",
    motsCles: [
      "notification linkedin",
      "vous êtes identifié",
      "nouveau message de",
      "facebook"
    ]
  }
  // Ajoutez autant de règles { nomLibelle: "...", motsCles: [...] } que vous le souhaitez.
];


// --- FONCTIONS PRINCIPALES ---

/**
 * Fonction principale qui analyse les e-mails.
 * Déclenchée automatiquement (voir setupTrigger).
 */
function trierEmailsPublicitaires() {
  Logger.log("Démarrage du scan des e-mails...");
  
  // Cherche toutes les conversations qui sont dans la boîte de réception ET non lues.
  const threads = GmailApp.search('is:inbox is:unread');
  let compteur = 0;

  if (threads.length === 0) {
    Logger.log("Aucun nouvel e-mail non lu trouvé.");
    return;
  }

  Logger.log(`Trouvé ${threads.length} conversations non lues à analyser.`);

  threads.forEach(thread => {
    let threadTraite = false;
    const messages = thread.getMessages();

    // Analyse chaque message (au cas où un seul message contiendrait le mot-clé)
    for (let i = 0; i < messages.length && !threadTraite; i++) {
      const message = messages[i];
      const sujet = message.getSubject().toLowerCase();
      const corps = message.getPlainBody().toLowerCase();

      // Vérifie chaque règle de tri
      for (let j = 0; j < REGLES_DE_TRI.length; j++) {
        const regle = REGLES_DE_TRI[j];
        
        // Vérifie si un mot-clé de CETTE règle est présent
        const motCleTrouve = regle.motsCles.some(motCle => {
          const mot = motCle.toLowerCase();
          return sujet.includes(mot) || corps.includes(mot);
        });

        // Si un mot-clé de la règle est trouvé
        if (motCleTrouve) {
          Logger.log(`Règle trouvée: '${regle.nomLibelle}' pour l'e-mail (Sujet: '${message.getSubject()}')`);

          // Récupère ou crée le libellé spécifique
          const libelleSpecifique = getOuCreerLibelle(regle.nomLibelle);
          
          if (libelleSpecifique) {
            // Applique le tri
            thread.addLabel(libelleSpecifique);
            thread.markRead(); // Marquer comme lu
            thread.moveToArchive(); // <-- RETIRE de la boîte de réception
            
            compteur++;
            threadTraite = true; // Marque le thread comme traité
          }
          
          break; // Sortir de la boucle des règles (cette règle a gagné)
        }
      } // Fin boucle des règles
    } // Fin boucle des messages
  }); // Fin boucle des threads

  Logger.log(`Traitement terminé. ${compteur} conversations triées dans leurs libellés respectifs.`);
}


/**
 * Fonction utilitaire pour créer le libellé s'il n'existe pas.
 * @param {string} nomLibelle Le nom du libellé.
 * @returns {GmailLabel|null} L'objet libellé ou null en cas d'erreur.
 */
function getOuCreerLibelle(nomLibelle) {
  let libelle = GmailApp.getUserLabelByName(nomLibelle);
  
  if (!libelle) {
    Logger.log(`Libellé "${nomLibelle}" non trouvé, création en cours.`);
    try {
      libelle = GmailApp.createLabel(nomLibelle);
    } catch (e) {
      Logger.log(`Erreur lors de la création du libellé : ${e}`);
      return null;
    }
  }
  return libelle;
}

/**
 * Fonction pour configurer un déclencheur temporel (trigger).
 * Exécute l'analyse toutes les heures.
 * VOUS DEVEZ EXÉCUTER CETTE FONCTION MANUELLEMENT UNE FOIS.
 */
function configurerTriggerHoraire() {
  // Supprime les anciens déclencheurs pour éviter les doublons
  ScriptApp.getProjectTriggers().forEach(trigger => {
    if (trigger.getHandlerFunction() === "trierEmailsPublicitaires") {
      ScriptApp.deleteTrigger(trigger);
    }
  });
  
  // Crée un nouveau déclencheur qui exécute 'trierEmailsPublicitaires' toutes les heures
  ScriptApp.newTrigger("trierEmailsPublicitaires")
      .timeBased()
      .everyHours(1) // Exécute toutes les heures
      .create();
      
  Logger.log("Déclencheur horaire configuré pour 'trierEmailsPublicitaires'.");
}

/**
 * Fonction utilitaire pour supprimer le déclencheur (si vous n'en avez plus besoin).
 */
function supprimerTriggers() {
  ScriptApp.getProjectTriggers().forEach(trigger => {
    if (trigger.getHandlerFunction() === "trierEmailsPublicitaires") {
      ScriptApp.deleteTrigger(trigger);
    }
  });
  Logger.log("Tous les déclencheurs pour 'trierEmailsPublicitaires' ont été supprimés.");
}

Étape 3 : Personnaliser la configuration

C’est l’étape la plus importante. En haut du script, vous trouverez la section // --- CONFIGURATION ---.

Ce script fonctionne avec un système de règles de tri. La configuration ressemble à ceci :

const REGLES_DE_TRI = [
  {
    nomLibelle: "Promos Shopping",
    motsCles: [
      "promotion", 
      "réduction", 
      "soldes"
    ]
  },
  {
    nomLibelle: "Newsletters Tech",
    motsCles: [
      "newsletter",
      "tech", 
      "IA"
    ]
  }
  // ...
];

Votre mission est de personnaliser cette liste REGLES_DE_TRI :

  1. Pour modifier une règle existante :
    • Modifiez nomLibelle: pour définir le dossier (libellé) exact où vous souhaitez que les e-mails aillent. Si le libellé n’existe pas, le script le créera pour vous.
    • Modifiez motsCles: pour affiner la liste des termes qui doivent déclencher ce tri.
  2. Pour ajouter une nouvelle règle :
    • Copiez-collez un bloc entier, de { à }, (n’oubliez pas la virgule de séparation entre les blocs).
    • Personnalisez le nomLibelle et la liste motsCles pour votre nouvelle catégorie.

⚠️ POINT TRÈS IMPORTANT : L’ORDRE DES RÈGLES COMPTE !

Le script lit vos règles de haut en bas. Dès qu’il trouve un mot-clé correspondant à une règle, il applique le libellé de cette règle et arrête de chercher.

Mon conseil : Placez toujours vos règles les plus spécifiques (ex: « Factures EDF ») avant vos règles plus générales (ex: « Factures »).

N’oubliez pas d’enregistrer votre projet en cliquant sur l’icône de disquette 💾.

Étape 4 : Activer le script (Le déclencheur)

Pour que le script fonctionne tout seul, il faut lui dire de s’exécuter régulièrement.

  1. Dans la barre de menu en haut, sélectionnez la fonction configurerTriggerHoraire dans le menu déroulant (à droite de « Déboguer »).
  2. Cliquez sur le bouton Exécuter.
  1. Autorisation requise : Google va vous demander la permission d’exécuter ce script. C’est normal, car il a besoin d’accéder à votre Gmail pour lire et modifier vos e-mails.
    • Cliquez sur Examiner les autorisations.
    • Choisissez votre compte Google.
    • Vous verrez un avertissement « Google n’a pas validé cette application ». Cliquez sur Paramètres avancés (ou « Advanced »), puis sur Accéder à [Nom de votre projet] (non sécurisé).
    • Cliquez sur Autoriser.

Une fois l’autorisation donnée, la fonction configurerTriggerHoraire s’exécute. C’est fait ! Votre script est maintenant actif et s’exécutera toutes les heures.

Et voilà !

Votre boîte de réception va enfin pouvoir respirer. Vous pouvez tester le script manuellement en sélectionnant la fonction trierEmailsPublicitaires et en cliquant sur Exécuter pour voir le tri se faire en direct.

N’hésitez pas à affiner votre liste de MOTS_CLES au fil du temps pour rendre le filtre de plus en plus performant !