How To Retrieve The Whole Message Body Using Gmail Api (python)
Solution 1:
same as noogui said but I found that snippet wont return the whole body
when the snippet exceed 200~ chars you will get it under payload.body.data you can find the whole body using payload.body.data
the catch is that you are getting it base64encoded so you need to decode it :)
the following code will do the trick
import base64
mail = service.users().messages().get(userId=user_id, id=id, format="full").execute()
def parse_msg(msg):
if msg.get("payload").get("body").get("data"):
return base64.urlsafe_b64decode(msg.get("payload").get("body").get("data").encode("ASCII")).decode("utf-8")
return msg.get("snippet")
Solution 2:
Use Users.messages.get from the docs where there's a Python snippet:
import base64
import email
from apiclient import errors
defGetMessage(service, user_id, msg_id):
try:
message = service.users().messages().get(userId=user_id, id=msg_id).execute()
print'Message snippet: %s' % message['snippet']
return message
except errors.HttpError, error:
print'An error occurred: %s' % error
defGetMimeMessage(service, user_id, msg_id):
try:
message = service.users().messages().get(userId=user_id, id=msg_id, format='raw').execute()
print'Message snippet: %s' % message['snippet']
msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
mime_msg = email.message_from_string(msg_str)
return mime_msg
except errors.HttpError, error:
print'An error occurred: %s' % error
What your trying to access is the payload.body or if you want to go further, payload.body.data.
Solution 3:
The gmail api docs provides sample code that showcases how to return the full message body as a message object structure. However, the code that they provided doesn't work for Python3. If you want to use to do this in Python3, you need to change their email.message_from_string()
to email.message_from_bytes
. Not sure exactly which module it was that changed this to make this issue happen, but the code below works just fine for me Python3.7.4
import base64
import email
message = gmail_conn.users().messages().get(userId=u_id, id=m_id, format='raw').execute()
msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
mime_msg = email.message_from_bytes(msg_str)
print(mime_msg)
Post a Comment for "How To Retrieve The Whole Message Body Using Gmail Api (python)"