簡體   English   中英

獲取Mime Message沒有返回base 64解碼版本? (Gmail API)

[英]Get Mime Message isn't returning a base 64 decoded version? (Gmail API)

在我的腳本中,我需要提取一組與某些查詢匹配的電子郵件。 我決定使用GMail的API python客戶端。 現在,我的理解是GetMimeMessage()應該返回一組解碼的 base 64消息。 這是我的代碼:

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-safe base 64解碼。 有人有什么建議嗎? 我真的很難過。

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)

你可以使用User.messages:get 此請求需要至少具有以下范圍之一的授權

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM