我试图使用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 must be str or None, not 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')
如果我不添加“ignore”参数,我会收到以下错误:
UnicodeDecodeError: 'utf-8' 编解码器无法解码字节0xeb,位于位置2214:无效的继续字节
如果我使用“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}
我的问题似乎与this one非常相似,但是,鉴于我不是Python专家并且需要使用GMail API,我不知道如何修复它。有什么想法吗?