La dernière fois a écrit comment supprimer tout à la fois, mais cette fois, j'écrirai sur la façon de le marquer comme lu.
python3.8.3
Il utilise une API appelée batchModify. En tant qu'utilisation, vous pouvez tout changer en même temps en définissant l'ID du courrier à supprimer et le contenu modifié (cette fois, supprimez l'étiquette non lue) dans le corps de la demande.
requestbody
{
'ids': [],
"removeLabelIds": [
"UNREAD"
]
}
Lorsque je cherche le courrier pour la première fois, j'ajoute une condition pour que seuls les éléments non lus puissent être extraits.
python
#Spécifiez une requête de recherche
query += 'is:unread ' #Non lu seulement
En fait, le processus de mise à jour est effectué avec la source suivante.
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:
#Connectez-vous à l'API
service = self.ConnectGmail()
self.MessageIDList = []
query = ''
#Spécifiez une requête de recherche
query += 'is:unread ' #Non lu seulement
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{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 lot
ids = {
'ids': [],
"removeLabelIds": [
"UNREAD"
]
}
ids['ids'].extend([str(d['id']) for d in self.MessageIDList['messages']])
#Processus de mise à jour
print()
print("{0}Lire le début de la mise à jour".format(len(ids['ids'])))
service.users().messages().batchModify(userId='me',body=ids).execute()
print("Mise à jour terminée")
return True
except Exception as e:
print("Une erreur est survenue")
print(e)
return False
if __name__ == '__main__':
gmail = GmailAPI()
#Puisqu'il y a une limite au nombre d'éléments qui peuvent être supprimés à la fois, répétez jusqu'à ce que les données cibles soient épuisées.
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:
#Quittez le processus
break
else:
#Attendez 10 secondes
time.sleep(10)
J'ai pu les marquer comme lus en bloc à l'aide de l'API. Si vous avez une grande quantité de courrier non lu, vous pouvez le mettre à jour plus rapidement que de l'exploiter à partir de l'interface graphique, alors veuillez en profiter.
Recommended Posts