Comment recenser les adresses e-mail envoyées sur Gmail avec Google Apps Script ?

Gérer ses contacts e-mail est une tâche essentielle, surtout lorsqu’il s’agit d’optimiser votre communication ou d’assurer un suivi de vos échanges professionnels. Cet article vous montre comment recenser automatiquement toutes les adresses e-mail auxquelles vous avez envoyé des messages sur Gmail au cours des cinq dernières années, directement dans un fichier Google Sheets. Grâce à Google Apps Script, cette automatisation simplifie un travail fastidieux et vous fait gagner un temps précieux.

Étape 1 : Pourquoi automatiser le recensement des e-mails envoyés ?

Recenser manuellement les e-mails envoyés peut être fastidieux et sujet à erreur. Voici pourquoi l’automatisation est idéale :

  • Gain de temps : Pas besoin de parcourir vos messages un par un.
  • Précision : Le script garantit qu’aucune adresse ne sera oubliée.
  • Organisation : Les e-mails sont regroupés par domaine et triés dans un tableau clair.

Étape 2 : Les prérequis

Avant de commencer, vous aurez besoin de :

  1. Un compte Gmail actif avec des e-mails envoyés sur une période significative.
  2. Un fichier Google Sheets prêt à recevoir les données.
  3. Des autorisations pour exécuter un script sur Gmail et Google Sheets.

Étape 3 : Le code Google Apps Script

Voici le script à copier et coller dans l’éditeur de Google Apps Script :

/**
 * Recenser les adresses e-mail envoyées sur Gmail sur les 5 dernières années
 * 
 * Ce script :
 * - Parcourt les e-mails envoyés sur Gmail au cours des 5 dernières années.
 * - Extrait les adresses e-mail des destinataires.
 * - Nettoie les adresses pour exclure les métadonnées (noms, chevrons, etc.).
 * - Filtre les adresses génériques ou indésirables (noreply, domaines spécifiques, etc.).
 * - Regroupe les e-mails par domaine dans une feuille Google Sheets.
 * - Trie les domaines et adresses par ordre alphabétique.
 * 
 * Instructions :
 * 1. Ouvrez une feuille Google Sheets.
 * 2. Allez dans Extensions > Apps Script et collez ce script.
 * 3. Cliquez sur Exécuter (►), autorisez les accès, et vérifiez les résultats.
 */

function onOpen() {
  // Ajouter un menu personnalisé lors de l'ouverture de la feuille Google Sheets
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("Gestion des E-mails") // Nom du menu
    .addItem("Recenser les E-mails envoyés", "recenserEmailsEnvoyés") // Nom de l'élément et fonction associée
    .addToUi();
}

function recenserEmailsEnvoyés() {
  // **Paramètres généraux**
  const dateActuelle = new Date(); // Date du jour
  const dateLimite = new Date(dateActuelle.setFullYear(dateActuelle.getFullYear() - 5)); // Date il y a 5 ans
  const dateLimiteTexte = `${("0" + dateLimite.getDate()).slice(-2)}/${("0" + (dateLimite.getMonth() + 1)).slice(-2)}/${dateLimite.getFullYear()}`;
  const requêteGmail = `in:sent after:${dateLimite.toISOString().split("T")[0].replace(/-/g, "/")}`; // Requête Gmail
  const tailleLot = 500; // Taille maximale d'un lot pour traiter les threads Gmail
  const carteEmails = new Map(); // Map pour regrouper les e-mails par domaine

  // **Fonction pour nettoyer les adresses e-mail**
  const nettoyerEmail = (email) => {
    const match = email.match(/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})/);
    return match ? match[0] : null;
  };

  // **Récupération des e-mails Gmail**
  const threads = GmailApp.search(requêteGmail);
  for (let début = 0; début < threads.length; début += tailleLot) {
    const lotThreads = threads.slice(début, début + tailleLot);
    lotThreads.forEach(thread => {
      thread.getMessages().forEach(message => {
        const destinataires = message.getTo().split(",");
        destinataires.forEach(email => {
          const emailNettoyé = nettoyerEmail(email.trim());
          if (emailNettoyé) {
            const domaine = emailNettoyé.split("@")[1];
            // Filtrer les adresses génériques ou indésirables
            if (domaine && !emailNettoyé.startsWith("noreply@") && !emailNettoyé.startsWith("no-reply@") && domaine !== "exemple.com") {
              if (!carteEmails.has(domaine)) {
                carteEmails.set(domaine, new Set());
              }
              carteEmails.get(domaine).add(emailNettoyé);
            }
          }
        });
      });
    });
  }

  // **Préparation de la feuille Google Sheets**
  const feuille = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Emails Envoyés") || 
                  SpreadsheetApp.getActiveSpreadsheet().insertSheet("Emails Envoyés");
  feuille.clear(); // Nettoyer l'onglet existant
  feuille.appendRow(["Domaine", "Adresse Email"]); // En-tête

  // **Tri et insertion des données**
  const domainesTriés = Array.from(carteEmails.keys()).sort();
  domainesTriés.forEach(domaine => {
    const emailsTriés = Array.from(carteEmails.get(domaine)).sort();
    emailsTriés.forEach(email => {
      feuille.appendRow([domaine, email]);
    });
  });

  // Ajustement automatique des colonnes
  feuille.autoResizeColumns(1, 2);

  // **Message de confirmation**
  SpreadsheetApp.getUi().alert(`La liste des e-mails depuis le ${dateLimiteTexte} a été créée dans l'onglet "Emails Envoyés" !`);
}

Étape 4 : Instructions pour exécuter le script

  1. Ouvrez Google Sheets et allez dans Extensions > Apps Script.
  2. Collez le script dans l’éditeur.
  3. Cliquez sur Enregistrer et donnez un nom à votre projet (par exemple, Recensement des e-mails).
  4. Cliquez sur ► (Exécuter) pour lancer le script.
  5. Autorisez les accès demandés par le script.
  6. Vérifiez les résultats dans l’onglet “Emails Envoyés” de votre fichier Google Sheets.

Étape 5 : Résultat attendu

Une fois le script exécuté, un tableau organisé est créé dans Google Sheets avec les colonnes suivantes :

  • Domaine : Le domaine des adresses e-mail (ex. : gmail.com).
  • Adresse Email : La liste des adresses e-mails correspondantes.

Améliorations et personnalisation

  • Nettoyage avancé : Le script filtre automatiquement les e-mails génériques (comme noreply@).
  • Tri alphabétique : Les domaines et adresses e-mail sont triés pour une meilleure lisibilité.
  • Filtrage : Ajoutez des exclusions spécifiques (par exemple, ignorer certains domaines internes à votre organisation).

Ce script vous permet de gérer efficacement les contacts e-mail de vos envois Gmail sur les 5 dernières années. En quelques clics, vous obtenez une vue claire et organisée de vos échanges, sans effort manuel. N’hésitez pas à adapter ce script à vos besoins spécifiques, et profitez d’une gestion optimale de vos e-mails  !