-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
75 lines (60 loc) · 1.89 KB
/
Copy pathmain.py
File metadata and controls
75 lines (60 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/usr/bin/python
from gmail_client import GmailApp
import sys
import logging.handlers
import argparse
# Setup the Gmail API
SCOPES = 'https://mail.google.com/'
MAX_RESULTS = 100
parser = argparse.ArgumentParser(
description='Tools for mass deleting mails',
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
'--search',
required=True,
help='Search filter like on Gmail search bar'
)
parser.add_argument(
'--mode',
required=False,
default='trash',
help='Trash messages or delete definitively. Usage: --mode=trash or --mode=delete. Default: trash'
)
args = parser.parse_args()
logging.basicConfig(
level='INFO',
format='%(levelname)s %(filename)s %(message)s',
datefmt='%H:%M:%S'
)
logging.info('*** Start on Python %s with %s ***', sys.version, args.search)
def main():
gmail_service = GmailApp(scopes=SCOPES, stored_credentials='credentials.json', key_file='client_secret.json')
# get list of email
page_token = None
while True:
toDeleteArrayIds = []
results = gmail_service.searchMessages(
userId='me',
labelIds=None,
q=args.search,
pageToken=page_token,
maxResults=MAX_RESULTS,
includeSpamTrash=None,
fields='nextPageToken, messages'
)
mails = results.get('messages', [])
page_token = results.get('nextPageToken')
# get all ids
for mail in mails:
toDeleteArrayIds.append(mail['id'])
# trigger the deletion for the current MAX_RESULTS mails
if len(toDeleteArrayIds) > 0:
if args.mode == 'delete':
gmail_service.deleteMessages(toDeleteArrayIds, userId='me')
else:
gmail_service.trashMessages(toDeleteArrayIds, userId='me')
if not page_token:
break
if __name__ == '__main__':
main()