[PYTHON] Löschen Sie alle unnötigen Google Mail-E-Mails mit API

Ich habe einen früheren Artikel geschrieben: "Abrufen von E-Mails von der Google Mail-API mithilfe von Python" (https://qiita.com/orikei/items/73dc1ccc95d1872ab1cf). Als Erweiterung habe ich versucht, alle früheren E-Mails mithilfe der API zu löschen.

Betriebsumgebung

python3.8.3

API zu verwenden

Verwenden Sie eine API namens batchDelete. Als Verwendung können Sie alle auf einmal löschen, indem Sie die ID der zu löschenden E-Mail als Liste an den Anforderungshauptteil übergeben.

GELTUNGSBEREICH ändert sich

Geben Sie SCOPE an, wenn Sie eine Verbindung zur Google Mail-API herstellen. Beim letzten Mal war es nur für die Erfassung in Ordnung, daher war es bei schreibgeschützt in Ordnung. Dieses Mal wird es jedoch gelöscht. Daher muss zu SCOPE gewechselt werden, auf das vollständig zugegriffen werden kann. Wenn Sie SCOPE in der Mitte ändern, müssen Sie als Einschränkung die Datei 'token.json' löschen. Wenn Sie es nicht löschen, werden die Änderungen nicht übernommen. Referenz: Wählen Sie Auth Scopes (von der Google Mail-API-Seite)

python


    def __init__(self):
        #Wenn Sie den Bereich ändern, Token.Json entfernen
        self._SCOPES = 'https://mail.google.com/' #Geben Sie SCOPE mit vollem Zugriff an
        self.MessageIDList = []
        self.MessageList = []

    def ConnectGmail(self):
        #Stellen Sie eine Verbindung zur Google Mail-API her
        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

Quellcode

Tatsächlich wird der Löschvorgang mit der folgenden Quelle ausgeführt. ** * Bei der Ausführung wird die E-Mail tatsächlich gelöscht. Achten Sie daher auf die von Ihnen angegebenen Bedingungen. ** ** **

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:

            #Stellen Sie eine Verbindung zur API her
            service = self.ConnectGmail()
            self.MessageIDList = []
            
            query = ''
            #Geben Sie eine Suchabfrage an
            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("Startdatum der Löschbedingung{0}Endtermin{1} From:{2}".format(DateFrom,DateTo,MessageFrom))

            #Holen Sie sich eine Liste der E-Mail-IDs(Bis zu 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

            #ID für batchDelete-Anforderungskörper extrahieren
            ids = {
                'ids': []
            }
            ids['ids'].extend([str(d['id']) for d in self.MessageIDList['messages']])
            
            #Prozess löschen
            print("{0}Löschvorgang gestartet".format(len(ids['ids'])))
            service.users().messages().batchDelete(userId='me',body=ids).execute()
            print("Löschung abgeschlossen")

            return True
    
        except Exception as e:
            print("Ein Fehler ist aufgetreten")
            print(e)
            return False

if __name__ == '__main__':

    gmail = GmailAPI()

    #Da die Anzahl der Elemente, die gleichzeitig gelöscht werden können, begrenzt ist, wird iterativ verarbeitet, bis die Zieldaten erschöpft sind.
    for i in range(100):
        #Rufen Sie den Löschvorgang auf, indem Sie beliebige Bedingungen (Zeitraum und Absenderadresse) angeben.
        if (gmail.DeleteMessageList(DateFrom='2010-01-01',DateTo='2020-10-30',MessageFrom='[email protected]') == False):
            break
        if len(gmail.MessageIDList['messages']) < 500:
            #Beenden Sie den Prozess
            break
        else:
            #Warten Sie 10 Sekunden
            time.sleep(10)

abschließend

Ich habe versucht, die E-Mail über die API zu löschen. Ich denke, es ist einfacher als es mit der GUI von Google Mail zu löschen, also hoffe ich, dass Sie darauf verweisen können.

Recommended Posts

Löschen Sie alle unnötigen Google Mail-E-Mails mit API
Senden Sie mit Django ganz einfach E-Mails mit Google Mail
Holen Sie sich den Betreff und den Text von Google Mail mit der Python- und Google Mail-API
Löschen Sie alle Lesefähigkeits-Lesezeichen
Extrudieren Sie mit der Fusion360-API
Löschen Sie alle auf pip installierten Bibliotheken mit einem einzigen Befehl