【发布时间】:2015-12-05 13:50:44
【问题描述】:
我正在尝试使用 Google 使用 Python 3.4 提供的 API 阅读我的 GMail 邮件。
我正在使用谷歌在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: 无效的继续字节
如果我使用 '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,我不知道如何解决它。 有什么想法吗?
【问题讨论】:
标签: python utf-8 python-3.4 gmail-api