繁体   English   中英

GMail API Python和编码/解码

[英]GMail API Python and Encoding/Decoding

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

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

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,而不是字节

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

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

如果我不添加'ignore'参数,我会收到以下错误:

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%!important;

= 09 = 09}

我的问题看起来与问题非常相似,但鉴于我不是Python专家,我需要使用GMail API,我看不出如何修复它。 任何的想法?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM