Get-Mime消息不返回base64解码版本?(Gmail API)

2024-09-30 14:34:54 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的脚本中,我需要提取一组匹配某些查询的电子邮件。为此,我决定使用GMail的API python客户端。现在,我的理解是getMiMemMessage()应该返回一组解码的base64消息。这是我的代码:

def GmailInput():

    credentials = get_credentials()
    http = credentials.authorize(httplib2.Http())
    service = discovery.build('gmail', 'v1', http=http)
    defaultList= ListMessagesMatchingQuery(service, 'me', 'subject:infringement label:unread ')
    print(defaultList)
    for msg in defaultList:
        currentMSG=GetMimeMessage(service, 'me', msg['id'])
        ....then I parse the text of the emails and extract some things

问题是,我无法实际解析消息体,因为GetMimeMessage没有返回base64解码的消息。所以我实际分析的结果是人类完全无法阅读。在

我觉得这很奇怪,因为GetMimeMessage(为了方便起见,在下面复制)确实对消息数据进行了url安全的base64解码。有人有什么建议吗?在这件事上我真的很为难。在

^{pr2}$

Tags: the脚本apihttp消息电子邮件servicemsg
1条回答
网友
1楼 · 发布于 2024-09-30 14:34:54

{a1}你可以使用。此请求要求authorization具有以下至少一个作用域。在

HTTP请求

GET https://www.googleapis.com/gmail/v1/users/userId/messages/id

import base64
import email
from apiclient import errors

def GetMessage(service, user_id, msg_id):
"""Get a Message with given ID.

Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
msg_id: The ID of the Message required.

Returns:
A Message.
"""
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):
"""Get a Message and use it to create a MIME Message.

Args:
service: Authorized Gmail API service instance.
user_id: User's email address. The special value "me"
can be used to indicate the authenticated user.
msg_id: The ID of the Message required.

Returns:
A MIME Message, consisting of data from Message.
"""
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

相关问题 更多 >