[PYTHON] Supprimez tous les e-mails Gmail inutiles avec l'API

J'ai écrit un article précédent, "Obtenir du courrier de l'API Gmail en utilisant Python" (https://qiita.com/orikei/items/73dc1ccc95d1872ab1cf). En prolongement de cela, j'ai essayé de supprimer tous les anciens e-mails à l'aide de l'API.

Environnement d'exploitation

python3.8.3

API à utiliser

Utilisez une API appelée batchDelete. En tant qu'utilisation, vous pouvez tout supprimer en même temps en transmettant l'ID du courrier à supprimer au corps de la demande sous forme de liste.

CHANGEMENTS DE PORTÉE

Spécifiez SCOPE lors de la connexion à l'API Gmail. La dernière fois, ce n'était OK que pour l'acquisition, donc c'était OK en lecture seule, mais cette fois, il sera supprimé, il est donc nécessaire de passer à SCOPE qui peut être pleinement accessible. De plus, si vous modifiez SCOPE au milieu, vous devez supprimer le fichier 'Token.json'. Si vous ne le supprimez pas, les modifications ne seront pas prises en compte. Référence: Choose Auth Scopes (from Gmail API page)

python


    def __init__(self):
        #Si vous modifiez la portée, jeton.Pour supprimer json
        self._SCOPES = 'https://mail.google.com/' #Spécifier le SCOPE d'accès complet
        self.MessageIDList = []
        self.MessageList = []

    def ConnectGmail(self):
        #Connectez-vous à l'API Gmail
        store = file.Storage('token.json')
        creds = store.get()
        if not creds or creds.invalid:
            flow = client.flow_from_clientsecrets('credentials.json', self._SCOPES)
            creds = tools.run_flow(flow, store)
        service = build('gmail', 'v1', http=creds.authorize(Http()))
        
        return service

Code source

En fait, le processus de suppression est effectué avec la source suivante. ** * Une fois exécuté, le courrier sera effectivement supprimé, veuillez donc faire attention aux conditions que vous spécifiez. ** **

GmailAPI.py


from __future__ import print_function
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
import time

class GmailAPI:

    def __init__(self):
        # If modifying these scopes, delete the file token.json.
        self._SCOPES = 'https://mail.google.com/'
        self.MessageIDList = []

    def ConnectGmail(self):
        store = file.Storage('token.json')
        creds = store.get()
        if not creds or creds.invalid:
            flow = client.flow_from_clientsecrets('credentials.json', self._SCOPES)
            creds = tools.run_flow(flow, store)
        service = build('gmail', 'v1', http=creds.authorize(Http()))
        
        return service


    def DeleteMessageList(self,DateFrom,DateTo,MessageFrom):
        try:

            #Connectez-vous à l'API
            service = self.ConnectGmail()
            self.MessageIDList = []
            
            query = ''
            #Spécifiez une requête de recherche
            if DateFrom != None and DateFrom !="":
                query += 'after:' + DateFrom + ' '
            if DateTo != None  and DateTo !="":
                query += 'before:' + DateTo + ' '
            if MessageFrom != None and MessageFrom !="":
                query += 'From:' + MessageFrom + ' '
            print("Date de début de la condition de suppression{0}Date de fin{1} From:{2}".format(DateFrom,DateTo,MessageFrom))

            #Obtenez une liste d'identifiants de messagerie(Jusqu'à 500)
            self.MessageIDList = service.users().messages().list(userId='me',maxResults=500,q=query).execute()
            if self.MessageIDList['resultSizeEstimate'] == 0: 
                print("Message is not found")
                return False

            #Extraire l'ID pour le lotDelete requestbody
            ids = {
                'ids': []
            }
            ids['ids'].extend([str(d['id']) for d in self.MessageIDList['messages']])
            
            #Supprimer le processus
            print("{0}Le traitement de la suppression a commencé".format(len(ids['ids'])))
            service.users().messages().batchDelete(userId='me',body=ids).execute()
            print("Suppression terminée")

            return True
    
        except Exception as e:
            print("Une erreur est survenue")
            print(e)
            return False

if __name__ == '__main__':

    gmail = GmailAPI()

    #Comme il existe une limite au nombre d'éléments qui peuvent être supprimés à la fois, les traitements itératifs jusqu'à ce que les données cibles soient épuisées.
    for i in range(100):
        #Appelez le processus de suppression en spécifiant des conditions arbitraires (période et adresse De)
        if (gmail.DeleteMessageList(DateFrom='2010-01-01',DateTo='2020-10-30',MessageFrom='[email protected]') == False):
            break
        if len(gmail.MessageIDList['messages']) < 500:
            #Quittez le processus
            break
        else:
            #Attendez 10 secondes
            time.sleep(10)

en conclusion

J'ai essayé de supprimer le courrier à l'aide de l'API. Je pense que c'est plus facile que de le supprimer avec l'interface graphique de Gmail, alors j'espère que vous pourrez vous y référer.

Recommended Posts

Supprimez tous les e-mails Gmail inutiles avec l'API
Envoyez facilement des e-mails avec Gmail avec Django
Obtenez l'objet et le corps de Gmail avec Python et l'API Gmail
Supprimer tous les signets de lisibilité
Extruder avec l'API Fusion360
Supprimer toutes les bibliothèques installées sur pip avec une seule commande