如何使用Gmail API(python)检索整个邮件正文

时间:2018-05-31 17:54:51

标签: python-3.x gmail-api

我想使用gmail api提取邮件的整个邮件正文。现在我正在使用'片段',但我需要整个文本。我搜索并发现它与有效载荷有关,但我不知道如何。有人能告诉我一个例子吗?另外,我正在使用Gmail api通过python。

3 个答案:

答案 0 :(得分:7)

与noogui所说的一样,但是我发现该片段不会返回整个身体

当代码段超过200个字符时,您将在有效负载下获取它。body.data 你可以使用payload.body.data

找到整个身体

要注意的是,您正在对其进行base64编码,因此需要对其进行解码:)

以下代码可以解决问题

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") 

答案 1 :(得分:2)

使用来自那些Python代码段的文档中的Users.messages.get

import base64
import email
from apiclient import errors

def GetMessage(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

def GetMimeMessage(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

您尝试访问的内容是payload.body,或者如果您想更进一步,payload.body.data

答案 2 :(得分:0)

gmail api文档提供了示例代码,展示了如何将完整的消息正文作为消息对象结构返回。但是,他们提供的代码不适用于Python3。如果要在Python3中使用此功能,则需要将其email.message_from_string()更改为email.message_from_bytes。不确定是哪个模块更改了该模块以使此问题发生,但是下面的代码对我来说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)