Stockage saturé ? 5 Scripts Python efficaces pour nettoyer Gmail

Par Jérémy · · 12 min de lecture
Employé de bureau stressé devant une alerte de stockage Gmail saturé
Employé de bureau stressé devant une alerte de stockage Gmail saturé, illustrant le besoin de 5 Scripts Python pour nettoyer Gmail

Vous payez probablement 1,99 € par mois à Google pour stocker des newsletters que vous n'avez jamais ouvertes, c'est une taxe sur la flemme numérique, un racket organisé qui m'énerve au plus haut point.

Votre boîte de réception affiche 14 500 emails non lus, votre barre de stockage clignote en rouge cramoisi, et les algorithmes vous harcèlent pour passer au forfait supérieur. En tant que support technique, je passe énormément de temps sur mes journée à troubleshoot des erreurs APIs, et je vous garantis une chose : l'interface web de Gmail est délibérément conçue pour vous retenir captif et vous faire perdre un temps précieux.

Le bouton "Tout sélectionner" est une illusion, il ne charge que 50 ou 100 éléments à la fois. Si vous souhaitez purger 50 000 mails d'un coup, vous allez devoir cliquer 500 fois en plus de subir les temps de chargement et prier pour que le navigateur ne s'effondre pas sous le poids du cache.

Trier ses mails à la main en 2026, c'est accepter de perdre sa journée. Vous n'avez pas besoin d'être un génie de l'informatique pour reprendre la main : un simple copier-coller suffit pour effacer des années de pollution numérique.

Laissez tomber les extensions Chrome qui siphonnent vos données en douce, on va faire ça à l'ancienne.

Voici 5 scripts Python pour nettoyer Gmail qui tournent en local, sur votre propre machine.

Code Python sur un écran pour illustrer les 5 Scripts Python pour nettoyer Gmail

1. L'interface graphique Gmail.

L'interface graphique (GUI) de Gmail n'a pas été programmée pour la suppression massive.

Elle est calibrée pour afficher des publicités ciblées et capter votre attention. Lorsque vous tentez de supprimer 5 000 e-mails simultanément via votre navigateur web, vous déclenchez une requête asynchrone lourde qui finit inévitablement par un timeout silencieux.

Le navigateur doit calculer le rendu visuel, charger les trackers... Bref, c'est une usine à gaz!

L'API Gmail, en revanche, est un passe-partout systémique, un accès direct et non filtré aux serveurs de base de données de Google. Là où l'interface humaine vous limite artificiellement, un script Python exécute des purges par milliers en quelques secondes grâce aux requêtes par lots (batch requests).

Vous contournez donc les limitations de l'interface graphique et parlez le langage des machines.

C'est la différence entre vider l'océan avec une petite cuillère et ouvrir les vannes d'un barrage.

2. Configuration

N'ayez pas peur du terminal, ce n'est qu'une interface texte dépourvue des distractions corporatives. Si vous savez écrire une formule Excel, vous savez exécuter un script Python.

Étape 1 : Le Moteur (Python)

Allez sur python.org et téléchargez la dernière version stable. TRÈS IMPORTANT : Lors de l'installation sous Windows, cochez impérativement la case "Add Python to PATH". C'est ce qui permet à votre système de reconnaître les commandes.

Pour plus de détails sur ce sujet, je vous invite à consulter mon guide Comment installer Python sous Mac et Windows.

Étape 2 : Le Terminal

Sur Windows, faites Windows + R, tapez cmd et validez.

Sur Mac, faites Cmd + Espace, tapez Terminal, puis tapez python --version. Si un numéro s'affiche, le moteur tourne.

Étape 3 : OAuth 2.0

L'époque du bricolage avec votre mot de passe en clair est terminée depuis les mises à jour de sécurité de 2025. Nous allons donc créer un jeton d'accès sécurisé (OAuth 2.0).

  1. Connectez-vous à la Google Cloud Console.
  2. Créez un "Projet" (nommez-le "Operation-Scorched-Earth").
  3. Dans la barre de recherche, trouvez l'API "Gmail API" et activez-la.
  4. Accédez à "Identifiants" (Credentials) > "Créer des identifiants" > "ID client OAuth".
  5. Sélectionnez "Application de bureau".
  6. Téléchargez le fichier JSON obtenu. Renommez-le exactement credentials.json.
  7. Placez ce fichier dans un nouveau dossier sur votre bureau appelé bunker_gmail.

La première fois que vos scripts s'exécuteront, une page web s'ouvrira pour vous demander l'autorisation, créant un fichier token.json local. Ne partagez jamais ces fichiers.

J'ai également crée un guide détaillé sur Comment obtenir vos identifiants Gmail Oauth 2.0

Étape 4 : Bibliothèques Python

Dans votre terminal, injectez les bibliothèques Python nécessaires avec cette commande :

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib requests

Représentation visuelle de la sécurité OAuth2 nécessaire pour les 5 Scripts Python pour nettoyer Gmail

3. Script 1 : Suppression de masse

L'API Gmail limite la suppression à 1000 e-mails par appel, et sa fonction de recherche ne renvoie que des petits lots de messages. Si vous souhaitez supprimer 50 000 mails de l'onglet "Promotions", un script basique va s'arrêter au bout de 100 mails.

Mon script inclut un mécanisme de pagination : il aspire tous les identifiants existants, puis les exécute par rafales de 1000 pour contourner les radars de Google.

Créez un fichier clean_batch.py dans votre dossier et collez ceci :

import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

# Autorisation maximale de modification
SCOPES = ['https://mail.google.com/']

def get_service():
    creds = None
    if os.path.exists('token.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
        with open('token.json', 'w') as token:
            token.write(creds.to_json())
    return build('gmail', 'v1', credentials=creds)

def scorched_earth_promotions():
    service = get_service()
    # Cible : Onglet Promotions, plus vieux qu'un an
    query = 'category:promotions older_than:1y'
    
    try:
        print(">> Scan des archives en cours. Cela peut prendre un instant...")
        messages =
        # Pagination : Récupère les messages jusqu'à épuisement
        request = service.users().messages().list(userId='me', q=query, maxResults=500)
        while request is not None:
            response = request.execute()
            messages.extend(response.get('messages',))
            request = service.users().messages().list_next(previous_request=request, previous_response=response)
        
        if not messages:
            print(">> La zone est déjà propre.")
            return

        print(f">> {len(messages)} fantômes verrouillés. Exécution de la purge...")
        ids_to_delete = [msg['id'] for msg in messages]
        
        # Découpage en rafales de 1000 (Limite stricte de l'API)
        for i in range(0, len(ids_to_delete), 1000):
            batch = ids_to_delete[i:i + 1000]
            service.users().messages().batchDelete(
                userId='me',
                body={'ids': batch}
            ).execute()
            print(f"   -> Salve envoyée : {len(batch)} e-mails incinérés.")
            
        print(">> Nettoyage terminal terminé avec succès.")

    except HttpError as error:
        print(f" Le système a rejeté la requête: {error}")

if __name__ == '__main__':
    scorched_earth_promotions()

Lancez le script via le terminal avec python clean_batch.py et regardez vos gigaoctets occupés fondre en temps réel.

4. Script 2 : Désabonnement automatique

Vous êtes abonné à des newsletters inutiles? Plutôt que de cliquer manuellement sur "Se désabonner" dans chaque mail, ce script scanne les en-têtes cachées (Headers) de vos e-mails récents pour traquer la balise standard List-Unsubscribe.

Il identifie les "pollueurs" et leur applique silencieusement un label "A_DESABONNER".

Créez unsubscribe_scan.py :

from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials

SCOPES = ['https://mail.google.com/']

def label_newsletters():
    creds = Credentials.from_authorized_user_file('token.json', SCOPES)
    service = build('gmail', 'v1', credentials=creds)

    try:
        label_body = {'name': 'A_DESABONNER', 'labelListVisibility': 'labelShow', 'messageListVisibility': 'show'}
        created_label = service.users().labels().create(userId='me', body=label_body).execute()
        label_id = created_label['id']
    except Exception:
        labels = service.users().labels().list(userId='me').execute()
        label_id = next(l['id'] for l in labels['labels'] if l['name'] == 'A_DESABONNER')

    print(">> Déploiement du radar sur les 30 derniers jours...")
    results = service.users().messages().list(userId='me', q='is:unread newer_than:30d', maxResults=100).execute()
    messages = results.get('messages',)

    count = 0
    for msg in messages:
        txt = service.users().messages().get(userId='me', id=msg['id'], format='metadata').execute()
        headers = txt['payload']['headers']
        
        if any(h['name'] == 'List-Unsubscribe' for h in headers):
            service.users().messages().modify(userId='me', id=msg['id'], body={'addLabelIds': [label_id]}).execute()
            count += 1

    print(f">> Analyse terminée. {count} parasites identifiés dans le dossier 'A_DESABONNER'.")

if __name__ == '__main__':
    label_newsletters()

Illustration du désabonnement massif via 5 Scripts Python pour nettoyer Gmail

5. Script 3 : Le tri par Intelligence Artificielle

Les filtres Gmail classiques basés sur des mots-clés sont obsolètes.

En 2026, on utilise l'IA pour analyser la sémantique, mais attention : envoyer vos e-mails professionnels à l'API d'OpenAI est une violation flagrante de confidentialité et une hérésie de sécurité.

Nous allons donc utiliser une IA locale (comme Ollama faisant tourner le modèle Mistral ou Llama sur votre machine). De ce fait, vos données ne quitteront jamais votre disque dur.

Installez Ollama (ollama.com), lancez-le, et créez local_ai_sorter.py :

import requests
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials

def analyze_with_local_ai(text):
    # Appel à votre modèle local (aucune donnée n'est envoyée sur Internet)
    url = "http://localhost:11434/api/generate"
    prompt = f"Analyse cet e-mail. Réponds STRICTEMENT par le mot 'URGENT' ou 'POUBELLE'. Email: {text[:500]}"
    data = {
        "model": "mistral",
        "prompt": prompt,
        "stream": False
    }
    try:
        response = requests.post(url, json=data)
        return response.json().get("response", "").strip()
    except Exception:
        return "ERREUR_SERVEUR_LOCAL"

def smart_sort():
    creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/gmail.readonly'])
    service = build('gmail', 'v1', credentials=creds)
    
    results = service.users().messages().list(userId='me', maxResults=5).execute()
    messages = results.get('messages',)

    print(">> Interrogation de l'IA locale en cours...")
    for msg in messages:
        message = service.users().messages().get(userId='me', id=msg['id'], format='full').execute()
        content = message.get('snippet', '')
        
        decision = analyze_with_local_ai(content)
        print(f"Message ID {msg['id']} -> Verdict IA : {decision}")

if __name__ == '__main__':
    smart_sort()

6. Script 4 : Détecter les emails lourd en données.

Le texte ne pèse rien, ce qui sature vos 15 Go gratuits, ce sont les PowerPoints de 40 Mo que le management vous envoie en boucle. Malheureusement, la conception technique des e-mails rend impossible la suppression de la pièce jointe seule (le message est immuable).

La tactique? On repère le mail lourd en données, on logue son existence, et on s'apprête à l'éliminer.

Créez heavy_cleaner.py :

import csv
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials

def find_heavy_emails():
    creds = Credentials.from_authorized_user_file('token.json', ['https://mail.google.com/'])
    service = build('gmail', 'v1', credentials=creds)

    print(">> Traque des e-mails massifs (>10 Mo)...")
    results = service.users().messages().list(userId='me', q='larger:10M').execute()
    messages = results.get('messages',)

    with open('cibles_lourdes.csv', 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow()

        for msg in messages:
            m = service.users().messages().get(userId='me', id=msg['id'], format='metadata').execute()
            headers = m['payload']['headers']
            subject = next((h['value'] for h in headers if h['name'] == 'Subject'), 'Sans sujet')
            date = next((h['value'] for h in headers if h['name'] == 'Date'), 'Inconnue')
            
            size_mb = int(m['sizeEstimate']) / (1024 * 1024)
            writer.writerow([msg['id'], subject, date, f"{size_mb:.2f} MB"])
            print(f" {subject} -> {size_mb:.2f} MB")
            
    print(">> Rapport 'cibles_lourdes.csv' généré. Vérifiez avant d'ordonner la frappe.")

if __name__ == '__main__':
    find_heavy_emails()

Poids symbolisant les pièces jointes lourdes à supprimer avec 5 Scripts Python pour nettoyer Gmail

7. Script 5 : Extraction Slack

La productivité silencieuse, c'est de ne plus ouvrir sa boîte mail du tout.

Ce script extrait les e-mails cruciaux et les pousse directement sur votre messagerie d'équipe (Slack, Discord) via un Webhook.

Vous avez l'air d'être réactif, alors que l'automatisation fait le pont à votre place.

import requests
import json
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials

SLACK_WEBHOOK_URL = "VOTRE_WEBHOOK_SLACK_ICI"

def daily_digest():
    creds = Credentials.from_authorized_user_file('token.json', ['https://www.googleapis.com/auth/gmail.readonly'])
    service = build('gmail', 'v1', credentials=creds)

    results = service.users().messages().list(userId='me', q='is:unread newer_than:1d').execute()
    messages = results.get('messages',)

    if not messages:
        requests.post(SLACK_WEBHOOK_URL, json={"text": ">> Bunker sécurisé. Aucun nouveau message."})
        return

    report = "📡 *Interception des Communications du Jour* :\n"
    for msg in messages[:5]: 
        m = service.users().messages().get(userId='me', id=msg['id'], format='metadata').execute()
        headers = m['payload']['headers']
        subject = next((h['value'] for h in headers if h['name'] == 'Subject'), 'No Subject')
        sender = next((h['value'] for h in headers if h['name'] == 'From'), 'Unknown').split('<')
        report += f"• *{sender.strip()}* : {subject}\n"

    requests.post(SLACK_WEBHOOK_URL, json={"text": report})
    print(">> Transmission furtive envoyée.")

if __name__ == '__main__':
    daily_digest()

Notification Slack montrant un résumé généré par l'un des 5 Scripts Python pour nettoyer Gmail

8. Comment automatiser cela ?

Exécuter ces scripts à la main est une insulte au concept d'automatisation, le véritable but est que la machine travaille pendant que vous dormez ou que vous faites semblant d'être en réunion.

Sur Windows (Le Planificateur)

Ouvrez le "Planificateur de tâches" natif de Windows, puis créez une tâche basique déclenchée "Tous les jours" à 03h00 du matin.

Dans l'action, pointez vers votre exécutable Python (python.exe) et passez en argument le nom de votre script (clean_batch.py).

Votre ordinateur fera le ménage seul.

L'Approche Raspberry Pi & Cron

Les puristes de "L'Automatiste" feront tourner ça sur un Raspberry Pi planqué derrière la box internet, via un cron job. C'est l'approche "Set and Forget".

Une fois configuré, vous reprenez définitivement le contrôle sur votre temps de cerveau disponible.

Conclusion : Reprenez l'Avantage Tactique

Google compte sur votre résignation pour vous facturer du stockage cloud, en utilisant ces scripts Python, vous brisez la chaîne. Vous pouvez commencer par le script de désabonnement, puis, quand vous serez en confiance, lancez le script de suppression.

Votre boîte mail n'est plus votre supérieure hiérarchique ; c'est un simple flux de données que vous domptez désormais par des lignes de commandes..

> Base_de_Données_FAQ

Q: Est-ce que ces scripts Python fonctionnent avec un compte Gmail gratuit ?

A:
Oui, absolument. L'API Gmail est accessible gratuitement pour les comptes personnels (@gmail.com) comme pour les comptes Google Workspace pro. Vous devez simplement créer un projet dans la Google Cloud Console pour obtenir vos identifiants.

Q: J'ai une erreur 'Less Secure Apps' quand je lance mon script, que faire ?

A:
C'est normal. Depuis 2025, Google interdit l'authentification par simple mot de passe. Vous devez impérativement utiliser le protocole OAuth 2.0 avec un fichier credentials.json, comme expliqué dans la section 2 de cet article.

Q: Est-ce risqué d'utiliser un script pour supprimer des emails ?

A:
Le risque zéro n'existe pas. Une erreur dans le code (comme oublier un filtre de date) peut tout supprimer. Je recommande toujours de faire un 'Dry Run' (une simulation qui affiche ce qui va être supprimé sans le faire) avant de lancer la suppression réelle.

Q: Combien d'emails puis-je supprimer par jour avec l'API ?

A:
Les quotas actuels de Google permettent environ 15 000 requêtes par jour pour un utilisateur standard. En utilisant les requêtes groupées (batch), vous pouvez supprimer des dizaines de milliers de mails sans atteindre cette limite.

Q: Faut-il savoir coder pour utiliser ces outils ?

A:
Un minimum de connaissances est requis pour installer Python et lancer les scripts dans un terminal. Cependant, les codes fournis ici sont prêts à l'emploi. Si vous préférez une interface graphique, des outils comme CleanMail (basé sur Python) existent.
#python #gmail #api, #nettoyer #gmail #python, #script #python #automatisation, #gmail #cleaner, #script #suppression #emails, #python #google #api #client, #inbox #zero #python

Rejoignez la Résistance.

Recevez le Pack de Survie Office + 1 astuce d'automatisation par semaine.

Données protégées. Zéro spam.

Jérémy

Jérémy

J'ai passé 6 ans dans le Support Technique à résoudre des cas complexes. Maintenant, je montre aux employés de bureau comment gagner du temps avec Python et Google Suite.

@Twitter

> cat comments.log (0)

Écrire dans la console :

> Aucune entrée trouvée. Soyez le premier à écrire dans le log.