-
Notifications
You must be signed in to change notification settings - Fork 1.9k
/
Copy pathgmail_api.py
45 lines (43 loc) · 2.29 KB
/
gmail_api.py
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
# for parsing commandline arguments
import argparse
from common import search_messages, gmail_authenticate
from read_emails import read_message
from send_emails import send_message
from delete_emails import delete_messages
from mark_emails import mark_as_read, mark_as_unread
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Send/Search/Delete/Mark messages using gmail's API.")
subparsers = parser.add_subparsers(help='Subcommands')
parser_1 = subparsers.add_parser('send', help='Send an email')
parser_1.add_argument('destination', type=str, help='The destination email address')
parser_1.add_argument('subject', type=str, help='The subject of the email')
parser_1.add_argument('body', type=str, help='The body of the email')
parser_1.add_argument('files', type=str, help='email attachments', nargs='+')
parser_1.set_defaults(action='send')
parser_2 = subparsers.add_parser('delete', help='Delete a set of emails')
parser_2.add_argument('query', type=str, help='a search query that selects emails to delete')
parser_2.set_defaults(action='delete')
parser_3 = subparsers.add_parser('mark', help='Marks a set of emails as read or unread')
parser_3.add_argument('query', type=str, help='a search query that selects emails to mark')
parser_3.add_argument('read_status', type=bool, help='Whether to mark the message as unread, or as read')
parser_3.set_defaults(action='mark')
parser_4 = subparsers.add_parser('search', help='Marks a set of emails as read or unread')
parser_4.add_argument('query', type=str, help='a search query, which messages to display')
parser_4.set_defaults(action='search')
args = parser.parse_args()
service = gmail_authenticate()
if args.action == 'send':
# TODO: add attachements
send_message(service, args.destination, args.subject, args.body, args.files)
elif args.action == 'delete':
delete_messages(service, args.query)
elif args.action == 'mark':
print(args.unread_status)
if args.read_status:
mark_as_read(service, args.query)
else:
mark_as_unread(service, args.query)
elif args.action == 'search':
results = search_messages(service, args.query)
for msg in results:
read_message(service, msg)