[PYTHON] Verwenden Sie die API, um gemeinsam eine große Anzahl ungelesener E-Mails in Google Mail zum Lesen zu ändern

Letztes Mal hat geschrieben, wie man alles auf einmal löscht, aber dieses Mal werde ich darüber schreiben, wie man es als gelesen markiert.

Betriebsumgebung

python3.8.3

API zu verwenden

Es verwendet eine API namens batchModify. Als Verwendung können Sie alles auf einmal ändern, indem Sie die ID der zu löschenden E-Mail und den geänderten Inhalt (diesmal entfernen Sie das ungelesene Etikett) im Anforderungshauptteil festlegen.

requestbody


            {
                'ids': [],
                "removeLabelIds": [
                "UNREAD"
                ]
            }

Filter hinzugefügt

Wenn ich zum ersten Mal nach E-Mails suche, füge ich eine Bedingung hinzu, damit nur ungelesene Elemente abgerufen werden können.

python


            #Geben Sie eine Suchabfrage an
            query += 'is:unread ' #Nur ungelesen

Quellcode

Tatsächlich wird der Aktualisierungsprozess mit der folgenden Quelle durchgeführt.

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 ModifyUnreadMessageList(self,DateFrom,DateTo,MessageFrom):
        try:

            #Stellen Sie eine Verbindung zur API her
            service = self.ConnectGmail()
            self.MessageIDList = []
            
            query = ''
            #Geben Sie eine Suchabfrage an
            query += 'is:unread ' #Nur ungelesen
            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("Zustand Startdatum{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 batchModify-Anforderungskörper extrahieren
            ids = {
                'ids': [],
                "removeLabelIds": [
                "UNREAD"
                ]
            }
            ids['ids'].extend([str(d['id']) for d in self.MessageIDList['messages']])
            
            #Aktualisierungsprozess
            print()
            print("{0}Update-Start lesen".format(len(ids['ids'])))
            service.users().messages().batchModify(userId='me',body=ids).execute()
            print("Update 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, wiederholen Sie den Vorgang, bis die Zieldaten erschöpft sind.
    for i in range(100):
        if (gmail.ModifyUnreadMessageList(DateFrom='2000-01-01',DateTo='2020-11-30',MessageFrom=None) == False):
            break
        if len(gmail.MessageIDList['messages']) < 500:
            #Beenden Sie den Prozess
            break
        else:
            #Warten Sie 10 Sekunden
            time.sleep(10)

abschließend

Ich konnte sie mithilfe der API als in großen Mengen gelesen markieren. Wenn Sie eine große Menge ungelesener E-Mails haben, können Sie diese schneller aktualisieren als über die GUI. Nutzen Sie sie daher.

Recommended Posts

Verwenden Sie die API, um gemeinsam eine große Anzahl ungelesener E-Mails in Google Mail zum Lesen zu ändern
Laden Sie eine große Anzahl von Bildern in Wordpress hoch
TensorFlow Aus einer großen Anzahl von Bildern lernen ... ~ (fast) Lösung ~
Konvertieren Sie eine große Anzahl von PDF-Dateien mit pdfminer in Textdateien
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Verwenden Sie shutil, um alle Ordner mit einer kleinen Anzahl von Dateien zu löschen
[Python] So fügen Sie eine beliebige Anzahl von Standardeingaben in die Liste ein
TensorFlow Aus einer großen Anzahl von Bildern lernen ... (ungelöstes Problem) → 12/18 Gelöst
Verschiedene Möglichkeiten, die letzte Zeile einer CSV-Datei in Python zu lesen
Einzeiler, der unter Linux eine große Anzahl von Testdateien gleichzeitig erstellt
Ich habe einen Zeilenbot erstellt, der Python verwendet, um ungelesene E-Mails aus Google Mail abzurufen!
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
So lesen Sie Seriennummerndateien in einer Schleife, verarbeiten sie und zeichnen sie grafisch auf
Zusammenfassung der Verwendung von MNIST mit Python
Finden Sie die Anzahl der Tage in einem Monat
Organisieren Sie eine große Anzahl von Dateien in Ordnern
So erstellen Sie eine Rest-API in Django
So lesen Sie Dateien in verschiedenen Verzeichnissen
Wie identifiziere ich das Element mit der geringsten Anzahl von Zeichen in einer Python-Liste?
Konsolidieren Sie eine große Anzahl von CSV-Dateien in Ordnern mit Python (Daten ohne Header).
Verwenden Sie Slackbot als Relais und kehren Sie im JSON-Format von Flasche zu Slack zurück.
Ein Tool zum Verfolgen von Postern mit einer großen Anzahl von Likes auf Instagram [25 Minuten bis 1 Sekunde]
Suchen Sie eine Richtlinie für die Anzahl der Prozesse / Threads, die auf dem Anwendungsserver festgelegt werden sollen
Verwendung der Python-Multiprocessing (Fortsetzung 3) apply_async in einer Klasse mit Pool als Mitglied
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
Beschleunigen Sie eine große Anzahl einfacher Abfragen in MySQL
Hinweise zur Verwendung von AIST Spacon ABCI
Ein Memorandum zur Verwendung von Keras 'keras.preprocessing.image
Praktisch, um Matplotlib-Unterzeichnungen in for-Anweisungen zu verwenden
Lesen Sie eine große Anzahl von Wertpapierberichten mit COTOHA
2 Möglichkeiten, alle CSV-Dateien in einem Ordner zu lesen
Verwenden Sie das Datum auf der x-Achse des in seaborn dargestellten tsplot
[Python] Generieren Sie zufällig eine große Anzahl englischer Personennamen
[Python] Programmieren, um die Nummer von a in einer Zeichenfolge zu finden, die eine bestimmte Anzahl von Malen wiederholt.