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,我看不出如何解决它。任何的想法?
正如阿卡努斯所说,这个问题与引用可打印的编纂有关。
我没有使用 quopri,而是使用了解码参数来实现与此类似的代码。
第一个错误是由我使用 Python 3.4 引起的。我不确定原因,但使用 Python 2.7 工作正常。