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