[英]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.