GMail API Python 和编码/解码

Nic*_*tti 5 python utf-8 python-3.4 gmail-api

我正在尝试使用Google 提供的API使用 Python 3.4读取我的 GMail 消息。

我正在使用 Google 在链接上提供的此功能:

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
Run Code Online (Sandbox Code Playgroud)

但是,如果我按原样使用此功能,则会出现以下错误:

类型错误:initial_value 必须是 str 或 None,而不是字节

所以我稍微改变了函数:

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('utf-8','ignore'))
       print(msg_str)
       mime_msg = email.message_from_string(msg_str.decode('utf-8','ignore'))

       return mime_msg
   except errors.HttpError:
       print('An error occurred')
Run Code Online (Sandbox Code Playgroud)

如果我不添加“忽略”参数,则会出现以下错误:

UnicodeDecodeError: 'utf-8' 编解码器无法解码位置 2214 中的字节 0xeb:连续字节无效

如果我使用 'ignore' 参数,那么邮件的内容(例如 HTML 文本)会包含一些奇怪的字符,例如:

=09=09body=2C#bodyTable=2C#bodyCell{

=09=09=09height:100% !important;

=09=09=09margin:0;

=09=09=09padding:0;

=09=09=09width:100% !重要;

=09=09}

我的问题似乎与这个问题非常相似,但是,鉴于我不是 Python 专家并且我需要使用 GMail API,我看不出如何解决它。任何的想法?

Nic*_*tti 0

正如阿卡努斯所说,这个问题与引用可打印的编纂有关。

我没有使用 quopri,而是使用了解码参数来实现与此类似的代码。

第一个错误是由我使用 Python 3.4 引起的。我不确定原因,但使用 Python 2.7 工作正常。