GMail API Python和编码/解码

时间:2015-09-09 14:21:55

标签: python utf-8 python-3.4 gmail-api

我尝试使用Google使用Python 3.4提供的API来阅读我的GMail消息。

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

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

但是,如果我使用此功能,我会收到以下错误:

  

TypeError:initial_value必须是str或None,而不是bytes

所以我稍微改变了一下这个功能:

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

如果我没有添加'忽略'参数我得到以下错误:

  

UnicodeDecodeError:' utf-8'编解码器不能将字节0xeb解码到位   2214:无效的连续字节

如果我使用'忽略'参数然后邮件的内容,例如HTML文本,有一些奇怪的字符,例如:

  

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

     

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

     

= 09 = 09 = 09margin:0;

     

= 09 = 09 = 09padding:0;

     

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

     

= 09 = 09}

我的问题似乎与this one非常相似,但鉴于我不是Python专家而且我需要使用GMail API,我看不出如何修复它。 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

邮件内容似乎是引用 - 打印编码。

您可以使用quopri模块处理它https://docs.python.org/2/library/quopri.html