1
- import httplib2
2
1
import os
3
- import base64
4
- import email
2
+ import httplib2
5
3
from apiclient import discovery
6
4
from oauth2client import client
7
5
from oauth2client import tools
8
6
from oauth2client .file import Storage
9
7
from apiclient import errors
10
8
11
- email_list = []
9
+ try :
10
+ import argparse
12
11
13
- # try:
14
- # import argparse
15
- #
16
- # flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
17
- # except ImportError:
18
- # flags = None
12
+ flags = argparse .ArgumentParser (parents = [tools .argparser ]).parse_args ()
13
+ except ImportError :
14
+ flags = None
19
15
20
16
# If modifying these scopes, delete your previously saved credentials
21
17
# at ~/.credentials/gmail-python-quickstart.json
@@ -33,7 +29,6 @@ def get_credentials():
33
29
Returns:
34
30
Credentials, the obtained credential.
35
31
"""
36
- # This function generates the required credentials required to make api calls
37
32
home_dir = os .path .expanduser ('~' )
38
33
credential_dir = os .path .join (home_dir , '.credentials' )
39
34
if not os .path .exists (credential_dir ):
@@ -54,117 +49,111 @@ def get_credentials():
54
49
return credentials
55
50
56
51
57
- def GetMsg (service , user_id , msg_id ):
58
- # This user defined message prints the email id's and their total number emails,of the senders who has sent status updates except user's
59
- try :
60
- message = service .users ().messages ().get (userId = user_id , id = msg_id ,
61
- format = 'metadata' ).execute ()
62
-
63
- payload = message ["payload" ]["headers" ]
64
-
65
- a = "X-Original-Sender"
66
- # The below part prints the email id's
67
- for d in payload :
68
- if a in d ["name" ]:
69
- email_list .append (d ["value" ])
70
- return (email_list )
71
- # mime_msg = email.message_from_string(msg_str)
72
-
73
- return "mime_msg"
74
- except errors .HttpError , error :
75
- print ('An error occurred: %s' % error )
76
-
77
-
78
52
def get_label_id (service , user_id , label_name ):
79
- foss_label_id = ""
53
+ """
54
+ Return the label id of a Gmail label
55
+ :param service: Authorized Gmail API service instance.
56
+ :param user_id: User's email address. The special value "me"
57
+ :param label_name: The name of the label id required
58
+ :return: string(label_id)
59
+ """
60
+ label_id = ''
80
61
try :
81
62
response = service .users ().labels ().list (userId = user_id ).execute ()
82
63
labels = response ['labels' ]
83
64
for label in labels :
84
65
if label ['name' ] == label_name :
85
- # print('Label id: %s - Label name: %s' % (label['id'], label['name']))
86
- foss_label_id = label ['id' ]
87
- except errors .HttpError , error :
88
- print ('An error occurred: %s' % error )
66
+ label_id = label ['id' ]
67
+ except errors .HttpError :
68
+ print ('An error occurred' )
89
69
90
- return foss_label_id
70
+ return label_id
91
71
92
72
93
- def ListMessagesWithLabels (service , user_id , label_ids = [] ):
94
- """List all Messages of the user's mailbox with label_ids applied .
73
+ def list_messages_matching_query (service , user_id , query = '' ):
74
+ """List all Messages of the user's mailbox matching the query .
95
75
96
76
Args:
97
77
service: Authorized Gmail API service instance.
98
78
user_id: User's email address. The special value "me"
99
79
can be used to indicate the authenticated user.
100
- label_ids: Only return Messages with these labelIds applied.
80
+ query: String used to filter messages returned.
81
+ Eg.- 'from:user@some_domain.com' for Messages from a particular sender.
101
82
102
83
Returns:
103
- List of Messages that have all required Labels applied . Note that the
84
+ List of Messages that match the criteria of the query . Note that the
104
85
returned list contains Message IDs, you must use get with the
105
- appropriate id to get the details of a Message.
86
+ appropriate ID to get the details of a Message.
106
87
"""
107
88
try :
108
89
response = service .users ().messages ().list (userId = user_id ,
109
- labelIds = label_ids ).execute ()
90
+ q = query ).execute ()
110
91
messages = []
111
92
if 'messages' in response :
112
93
messages .extend (response ['messages' ])
113
94
114
95
while 'nextPageToken' in response :
115
96
page_token = response ['nextPageToken' ]
116
- response = service .users ().messages ().list (userId = user_id ,
117
- labelIds = label_ids ,
118
- pageToken = page_token ).execute ()
97
+ response = service .users ().messages ().list (
98
+ userId = user_id , q = query , pageToken = page_token ).execute ()
119
99
messages .extend (response ['messages' ])
120
-
121
100
return messages
122
- except errors .HttpError , error :
123
- print ('An error occurred: %s' % error )
124
-
125
101
126
- def ListMessagesMatchingQuery ( service , user_id , query = '' ) :
127
- """List all Messages of the user's mailbox matching the query.
102
+ except errors . HttpError :
103
+ print ( 'An error occurred' )
128
104
129
- Args:
130
- service: Authorized Gmail API service instance.
131
- user_id: User's email address. The special value "me"
132
- can be used to indicate the authenticated user.
133
- query: String used to filter messages returned.
134
- Eg.- 'from:user@some_domain.com' for Messages from a particular sender.
135
105
136
- Returns:
137
- List of Messages that match the criteria of the query. Note that the
138
- returned list contains Message IDs, you must use get with the
139
- appropriate ID to get the details of a Message.
106
+ def get_sender_email_id (service , user_id , msg_id ):
107
+ """
108
+ This functions return the email id of the sender
109
+ :param service: The google service(here Gmail)
110
+ :param user_id: The user id of the user
111
+ :param msg_id: The message id that is to be retrived
112
+ :return: string(email id)
140
113
"""
114
+ email_id = ''
115
+
141
116
try :
142
- response = service .users ().messages ().list (userId = user_id ,
143
- q = query ).execute ()
144
- messages = []
145
- if 'messages' in response :
146
- messages .extend (response ['messages' ])
117
+ message = service .users ().messages ().get (userId = user_id , id = msg_id ,
118
+ format = 'metadata' ).execute ()
147
119
148
- while 'nextPageToken' in response :
149
- page_token = response ['nextPageToken' ]
150
- response = service .users ().messages ().list (userId = user_id , q = query ,
151
- pageToken = page_token ).execute ()
152
- messages .extend (response ['messages' ])
120
+ header_data = message ["payload" ]["headers" ]
153
121
154
- return messages
155
- except errors .HttpError , error :
156
- print ('An error occurred: %s' % error )
122
+ sender_text = "X-Original-Sender"
123
+
124
+ # Get email id from header data
125
+ for data in header_data :
126
+ if sender_text in data ["name" ]:
127
+ email_id = data ["value" ]
128
+ return email_id
129
+
130
+ except errors .HttpError :
131
+ print ('An error occurred' )
157
132
158
133
159
- def main (date ):
160
- # This is the function which asks the user for his query
134
+ def get_status_update_emails (status_update_date ):
135
+ """
136
+
137
+ :param status_update_date: Date of the status update you want to query
138
+ :return:
139
+ """
161
140
credentials = get_credentials ()
162
141
http = credentials .authorize (httplib2 .Http ())
163
142
service = discovery .build ('gmail' , 'v1' , http = http )
164
- query = '[foss-2017] Status Update [' + date + ']'
165
- message = []
166
- messgs = ListMessagesMatchingQuery (service , user_id = 'me' , query = query )
167
- for item in messgs :
168
- message = GetMsg (service , user_id = "me" , msg_id = item ['id' ])
169
- return message
143
+ status_update_date_string = status_update_date .strftime ('%d-%m-%Y' )
144
+ query = '[foss-2017] Status Update [%s]' % status_update_date_string
170
145
146
+ emails = []
147
+ messages = list_messages_matching_query (service , user_id = 'me' , query = query )
148
+
149
+ for message in messages :
150
+ email = get_sender_email_id (
151
+ service , user_id = "me" , msg_id = message ['id' ])
152
+ emails .append (email )
153
+
154
+ return emails
155
+
156
+
157
+ if __name__ == '__main__' :
158
+ credentials = get_credentials ()
159
+ http = credentials .authorize (httplib2 .Http ())
0 commit comments