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