Nov-27-2020, 09:06 AM
Here is my code and expected output:
from __future__ import print_function import pickle import os.path from googleapiclient.discovery import build from google_auth_oauthlib.flow import InstalledAppFlow from google.auth.transport.requests import Request import json from re import search import base64 SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'] def auth(): creds = None if os.path.exists('token.pickle'): with open ('token.pickle', 'rb') as token: creds = pickle.load(token) if not creds or not creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file( 'credentials.json', SCOPES) creds = flow.run_local_server(port=0) with open('token.pickle', 'wb') as token: pickle.dump(creds, token) service = build('gmail', 'v1', credentials=creds) return(service) def getMessages(service): results = service.users().messages().list(userId='me', labelIds=['UNREAD','Label_8']).execute() messages = results.get('messages', []) guest_emails=[] if not messages: print('No messages found.') else: print('Messages:') for message in messages: result_mes = service.users().messages().get(userId='me', id=message['id'], format='full').execute() result = result_mes['payload']['parts'][0]['body']['data'] mes_body = base64.b64decode(result).decode("utf-8") try: if search('(?<=Email: ).([^\s]+)', mes_body): email = search('(?<=Email: ).([^\s]+)', mes_body) guest_emails.append(email) except AssertionError: pass print(guest_emails)The dict that I am getting as a response from the call is:
{'id': '1760839065906ca4', 'threadId': '1760839065906ca4', 'labelIds': ['UNREAD', 'Label_8', 'CATEGORY_UPDATES'], 'snippet': 'New reservation Booking Customer: Patrick Amstutz Email: [email protected] Phone: +41 786451602 Reservation n. 2638032415 made on 27/11/2020 06:39:29 Reservation summary: Arrival: 05/04/', 'payload': {'partId': '', 'mimeType': 'multipart/alternative', 'filename': '', 'headers': [{'name': 'Delivered-To', 'value': '[email protected]'}, {'name': 'Received', 'value': 'by 2002:a05:6a10:6c1:0:0:0:0 with SMTP id c1csp1155930pxv; Thu, 26 Nov 2020 21:42:04 -0800 (PST)'}, {'name': 'X-Google-Smtp-Source', 'value': 'ABdhPJwP4uWsTIFOWxR8GRuBk5ScoLQG6Xmd9hCyrIWqlTIVhf6eZzv0quvoVMaLGwG1U4kaMwWQ'}, {'name': 'X-Received', 'value': 'by 2002:a1c:7e11:: with SMTP id z17mr6884757wmc.83.1606455723910; Thu, 26 Nov 2020 21:42:03 -0800 (PST)'}, {'name': 'ARC-Seal', 'value': 'i=1; a=rsa-sha256; t=1606455723; cv=none; d=google.com; s=arc-20160816; b=CY5LfIMprU1vXJpEPeYnbanngwcpMITGGI665ilXHKDTL3UqMSYHP929+rTDujMfQL IE9N4YuoV/pmVHXjxXMwMdjYDaTWQLGEQZ5AL3H2QW1O6MRC5qEh0h0ExUjDyePmBV6F o2SxojpjoXB3pWHdcmqBMngMjubjWhgqbFICy5xkfkft+HGOSRCGSlPg7Ga1cKfvp/Yy N6ARXq4Qxx30vtXreSjiUQz81bWIsvqdCOfjn5N2e8e6VYhXlHr7fxEaK7zjKaWNS/BM APUXBct5Sbf2eQJRdmyxAFBZejHZT0ronhvhMKi4tpAqhEbMEVUy2raOkekNb8Mx+IK/ RS5g=='}, {'name': 'ARC-Message-Signature', 'value': 'i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:message-id:subject:reply-to:from:to :dkim-signature:dkim-filter:date; bh=0fS031IapzXSpk1WEXHMadkHMVnHE2Yl+F+qwSevZac=; b=efHmR1uzqyyyYc7PB2+0f56C1cAWpLyhUj06m7/vX47Lu0mgbZB+E6LZcegcmZ3/h4 lTLZhfbYAD+kkTSwLJQBBkSmYm23LsxAb7FxY11amM+TxaL2Fp/rJkr4XbfIuxx71ZIX hd4OCGVIgVNMtatykc0HK4OCWYdlT+W4a5wvyEYB8CnnHTJMMSG9xvTXMRKl2ltyvOr5 VPacZtwfZ77FW1MEjnMcp3B3zidwCptJerWV5fZXqu2PmoVA6xhNLPMQ+3xVgA+pd5/W z4b8pT5sPFx+bg4P+0n4Z7qf4LVEAmi7gkkL8MVmTBCPZSElvHyek/2p466sSgQOMnGx nZMg=='}, {'name': 'ARC-Authentication-Results', 'value': 'i=1; mx.google.com; dkim=pass [email protected] header.s=default header.b=UMJH4ho1; spf=pass (google.com: domain of [email protected] designates 212.237.48.102 as permitted sender) [email protected]; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=krossbooking.com'}, {'name': 'Return-Path', 'value': '<[email protected]>'}, {'name': 'Received', 'value': 'from krossmail.krossbooking.com (krossmail.krossbooking.com. [212.237.48.102]) by mx.google.com with ESMTPS id j65si7800376wma.123.2020.11.26.21.42.03 for <[email protected]> (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Nov 2020 21:42:03 -0800 (PST)'}, {'name': 'Received-SPF', 'value': 'pass (google.com: domain of [email protected] designates 212.237.48.102 as permitted sender) client-ip=212.237.48.102;'}, {'name': 'Authentication-Results', 'value': 'mx.google.com; dkim=pass [email protected] header.s=default header.b=UMJH4ho1; spf=pass (google.com: domain of [email protected] designates 212.237.48.102 as permitted sender) [email protected]; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=krossbooking.com'}, {'name': 'Date', 'value': 'Fri, 27 Nov 2020 06:42:02 +0100'}, {'name': 'DKIM-Filter', 'value': 'OpenDKIM Filter v2.11.0 krossmail.krossbooking.com B82281855B84'}, {'name': 'DKIM-Signature', 'value': 'v=1; a=rsa-sha256; c=relaxed/simple; d=krossbooking.com; s=default; t=1606455721; bh=0fS031IapzXSpk1WEXHMadkHMVnHE2Yl+F+qwSevZac=; h=To:From:Reply-To:Subject:From; b=UMJH4ho1Ohf6DaeuWUQkW/ll/7G6Y/ByeuLxp+IcZyF35qiFbgxnCKE1nOrTSeLtU\t nuGmjnYE1QmdZ+L2co5Ku+159s3Mqse44NNDGGd4JyclFuhVwJjkBcvFIk0R+KHx+g\t +Z31oA42nAwzyxtVXldVFm+NSxA+eJwz37sqFkv8='}, {'name': 'To', 'value': '[email protected]'}, {'name': 'From', 'value': 'Kross Booking <[email protected]>'}, {'name': 'Reply-To', 'value': 'Kross Booking <[email protected]>'}, {'name': 'Subject', 'value': 'New Reservation Booking.com - 2638032415 - ALTIDO Portugal'}, {'name': 'Message-ID', 'value': '<caee68f9abaf4b57fd614842ab7bf304@KrossSP>'}, {'name': 'Content-Type', 'value': 'multipart/alternative; boundary="b1_caee68f9abaf4b57fd614842ab7bf304"'}, {'name': 'Content-Transfer-Encoding', 'value': '8bit'}], 'body': {'size': 0}, 'parts': [{'partId': '0', 'mimeType': 'text/plain', 'filename': '', 'headers': [{'name': 'Content-Type', 'value': 'text/plain; charset=us-ascii'}], 'body': {'size': 602, 'data': 'TmV3IHJlc2VydmF0aW9uIEJvb2tpbmcNCg0KQ3VzdG9tZXI6IFBhdHJpY2sgQW1zdHV0eg0KDQpFbWFpbDogcGFtc3R1LjI2NjAzOUBndWVzdC5ib29raW5nLmNvbQ0KDQpQaG9uZTogKzQxIDc4NjQ1MTYwMg0KDQpSZXNlcnZhdGlvbiBuLiAyNjM4MDMyNDE1IG1hZGUgb24gMjcvMTEvMjAyMCAwNjozOToyOQ0KDQpSRVNFUlZBVElPTiBTVU1NQVJZOg0KDQpBUlJJVkFMOiAwNS8wNC8yMDIxIC0gREVQQVJUVVJFOiAxMS8wNC8yMDIxDQoNClRPVEFMIEZBUkU6IEV1cm8gNTU4LDY1DQoNCkdVRVNUUzogMg0KDQpTVEFUVVM6IENvbmZpcm1lZA0KDQpSRVNFUlZBVElPTiBGT1I6IDEgeCBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZyAtDQpTdGFuZGFyZCByYXRlDQoNCkFTU0lHTkVEIFJPT01TOiBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZw0KDQpOT1RFUzogKiogVEhJUyBSRVNFUlZBVElPTiBIQVMgQkVFTiBQUkUtUEFJRCAqKiBZb3UgaGF2ZSBhIGJvb2tlciB0aGF0DQp3b3VsZCBsaWtlIGZyZWUgcGFya2luZy4gKGJhc2VkIG9uIGF2YWlsYWJpbGl0eSkgYWR1bHQ6IDINCg0KDQo='}}, {'partId': '1', 'mimeType': 'text/html', 'filename': '', 'headers': [{'name': 'Content-Type', 'value': 'text/html; charset=us-ascii'}], 'body': {'size': 755, 'data': 'PHA-TmV3IHJlc2VydmF0aW9uIEJvb2tpbmc8L3A-DQoNCg0KPHA-Q3VzdG9tZXI6IFBhdHJpY2sgQW1zdHV0ejwvcD4NCjxwPkVtYWlsOiBwYW1zdHUuMjY2MDM5QGd1ZXN0LmJvb2tpbmcuY29tPC9wPg0KPHA-UGhvbmU6ICs0MSA3ODY0NTE2MDI8L3A-DQoNCjxwPlJlc2VydmF0aW9uIG4uIDI2MzgwMzI0MTUgbWFkZSBvbiAyNy8xMS8yMDIwIDA2OjM5OjI5PC9wPg0KPHA-PGI-UmVzZXJ2YXRpb24gc3VtbWFyeTo8L2I-PC9wPg0KPHA-PGI-QXJyaXZhbDo8L2I-IDA1LzA0LzIwMjEgLSA8Yj5EZXBhcnR1cmU6PC9iPiAxMS8wNC8yMDIxPC9wPg0KPHA-PGI-VG90YWwgZmFyZTo8L2I-IEV1cm8gNTU4LDY1PC9wPg0KPHA-PGI-R3Vlc3RzOjwvYj4gMjwvcD4NCjxwPjxiPlN0YXR1czo8L2I-IENvbmZpcm1lZDwvcD4NCjxwPjxiPlJlc2VydmF0aW9uIGZvcjo8L2I-IDEgeCBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZyAtIFN0YW5kYXJkIHJhdGU8L3A-DQo8cD48Yj5Bc3NpZ25lZCByb29tczo8L2I-IEFMVElETyBDaGlhZG8gU2VsZiBDaGVjay1JbiAyLUJSIEZsYXQgdy9QYXJraW5nPC9wPg0KPHA-PGI-Tm90ZXM6PC9iPiAqKiBUSElTIFJFU0VSVkFUSU9OIEhBUyBCRUVOIFBSRS1QQUlEICoqDQoNCllvdSBoYXZlIGEgYm9va2VyIHRoYXQgd291bGQgbGlrZSBmcmVlIHBhcmtpbmcuIChiYXNlZCBvbiBhdmFpbGFiaWxpdHkpDQoNCmFkdWx0OiAyDQoNCjwvcD4NCjxwPjwvcD4NCg0KDQo='}}]}, 'sizeEstimate': 5286, 'historyId': '874369', 'internalDate': '1606455722000'}From this dict I am trying to get
TmV3IHJlc2VydmF0aW9uIEJvb2tpbmcNCg0KQ3VzdG9tZXI6IFBhdHJpY2sgQW1zdHV0eg0KDQpFbWFpbDogcGFtc3R1LjI2NjAzOUBndWVzdC5ib29raW5nLmNvbQ0KDQpQaG9uZTogKzQxIDc4NjQ1MTYwMg0KDQpSZXNlcnZhdGlvbiBuLiAyNjM4MDMyNDE1IG1hZGUgb24gMjcvMTEvMjAyMCAwNjozOToyOQ0KDQpSRVNFUlZBVElPTiBTVU1NQVJZOg0KDQpBUlJJVkFMOiAwNS8wNC8yMDIxIC0gREVQQVJUVVJFOiAxMS8wNC8yMDIxDQoNClRPVEFMIEZBUkU6IEV1cm8gNTU4LDY1DQoNCkdVRVNUUzogMg0KDQpTVEFUVVM6IENvbmZpcm1lZA0KDQpSRVNFUlZBVElPTiBGT1I6IDEgeCBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZyAtDQpTdGFuZGFyZCByYXRlDQoNCkFTU0lHTkVEIFJPT01TOiBBTFRJRE8gQ2hpYWRvIFNlbGYgQ2hlY2stSW4gMi1CUiBGbGF0IHcvUGFya2luZw0KDQpOT1RFUzogKiogVEhJUyBSRVNFUlZBVElPTiBIQVMgQkVFTiBQUkUtUEFJRCAqKiBZb3UgaGF2ZSBhIGJvb2tlciB0aGF0DQp3b3VsZCBsaWtlIGZyZWUgcGFya2luZy4gKGJhc2VkIG9uIGF2YWlsYWJpbGl0eSkgYWR1bHQ6IDINCg0KDQo=and this is getting printed when I use:
print(result_mes['payload']['part'][0]['body']['data'])But get a KeyError: 'data' when I try to do:
result = result_mes['payload']['part'][0]['body']['data']Here is the output when I run the script:
Error:C:\Users\user\PythonApps\EmailsReader\EmailsReaderV2>python EmailsReader2.py
Messages:
Traceback (most recent call last):
File "C:\Users\user\PythonApps\EmailsReader\EmailsReaderV2\EmailsReader2.py", line 82, in <module>
getMessages(service)
File "C:\Users\user\PythonApps\EmailsReader\EmailsReaderV2\EmailsReader2.py", line 49, in getMessages
result = result_mes['payload']['parts'][0]['body']['data']
KeyError: 'data'
What is interesting is that when I made a new script and just assigned the dict that I am getting back from the GMAIL API to a dict and tried to do the same operation it worked without a problem. Any suggestions?