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.
python3.8.3
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"
]
}
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
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)
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