Permalink
Branch: master
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
77 lines (68 sloc) 2.98 KB
import httplib2
import os
import json
import base64
import argparse
from apiclient import discovery, errors
from oauth2client import client
from oauth2client import tools
from oauth2client.file import Storage
# If modifying these scopes, delete your previously saved credentials
# at ~/.credentials/gmail-python-quickstart.json
SCOPES = 'https://www.googleapis.com/auth/gmail.readonly'
CLIENT_SECRET_FILE = 'client_secret.json'
APPLICATION_NAME = 'Gmail API Python Quickstart'
def get_credentials():
home_dir = os.path.expanduser('~')
credential_dir = os.path.join(home_dir, '.credentials')
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir, 'gmail-python-quickstart.json')
store = Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
credentials = tools.run(flow, store)
print('Storing credentials to ' + credential_path)
return credentials
def push_messages(service, page):
if 'messages' in page:
for message in page['messages']:
try:
msg_id = message['id']
path = os.path.join("emails", "{}.json".format(msg_id))
if(os.path.exists(path)):
continue
message = service.users().messages().get(userId="me", id=msg_id, format='raw').execute()
message['raw'] = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
message['id'] = int(message['id'], 16)
message['historyId'] = int(message['historyId'])
message['internalDate'] = int(message['internalDate'])
message['threadId'] = int(message['threadId'], 16)
del message['snippet']
del message['sizeEstimate'])
with open(path, "w") as file:
try:
message['raw'] = message['raw'].decode("ascii")
except Exception as e:
message['raw'] = ""
file.write(json.dumps(message))
except Exception as e:
print('[-] Error: {}'.format(e))
def main():
credentials = get_credentials()
print("[+] Gmail credentials obtained")
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)
print("[+] Connection to Gmail established.")
response = service.users().messages().list(userId="me").execute()
print("[+] Parsing first page of emails.")
messages = push_messages(service, response)
while 'nextPageToken' in response:
page_token = response['nextPageToken']
response = service.users().messages().list(userId="me", pageToken=page_token).execute()
messages = push_messages(service, response)
print(json.dumps(messages))
if __name__ == '__main__':
main()