Gmail api python编码/解码错误怎么办?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (83)

我正在尝试使用GmailAPI从Gmail读取电子邮件。我听从了这里的指示:https://developers.google.com/gmail/api/v1/reference/users/messages/get

我做了一些修改,以便在python 3上运行它,因此我得到了以下代码:

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('utf8'))
  mime_msg = email.message_from_bytes(msg_str)
  print(mime_msg)

  return mime_msg
except errors.HttpError as error:
  print ('An error occurred: %s' % error)

现在输出非常接近我想要的,但是有一个问题是输出中的匈牙利重音字符很奇怪:G=C3=A1bor而不是Gábor

此外,html标记也被破坏:

Follow us:          =09=09=09=09=09=09=09=09=09<a href=3D"http=

我已经知道,这与消息的编码方式有关,请参见电子邮件的标题:

Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

问题是,我似乎找不到正确解码的方法。

提问于
用户回答回答于

代码如下:

# Get your message
message = service.users().messages().get(userId=user_id, id=msg_id, format='full').execute()

# Get the right body data item (this part was my Heureka-moment as there are several 'data' keys)
content = message['payload']['parts'][0]['parts'][1]['body']['data']

# Encode
msg_body = base64.urlsafe_b64decode(content).decode('utf-8')

这个序列使de/编码对我有效。对于Base 64和GoogleGmailAPI的解码/编码问题,有很多不同的解决方案建议,但似乎每种情况都是独特的。

扫码关注云+社区

领取腾讯云代金券