gpt4 book ai didi

python - Gmail 邮件正文的编码是什么?如何解码?

转载 作者:太空狗 更新时间:2023-10-29 20:43:20 26 4
gpt4 key购买 nike

我正在为 Gmail 使用 Python API。我正在查询一些消息并正确检索它们,但消息正文看起来完全是胡说八道,即使 MIME 类型据说是 text/plaintext/html.

我一直在搜索 API 文档,但他们一直说它是一个字符串,而它显然必须是某种编码......我认为它可能是 base64 编码,但试图解码它与 Python base64 一起给出了 TypeError: Incorrect padding,所以要么它不是 base64,要么我的解码很糟糕。

我很乐意提供一个很好的例子,但由于我正在处理敏感信息,所以我必须对其进行一些混淆......

{
"payload": {
"mimeType": "multipart/mixed",
"filename": "",
"headers": [
...
],
"body": {
"size": 0
},
"parts": [
{
"mimeType": "multipart/alternative",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "multipart/alternative; boundary=001a1140b160adc309053bd7ec57"
}
],
"body": {
"size": 0
},
"parts": [
{
"partId": "0.0",
"mimeType": "text/plain",
"filename": "",
"headers": [
{
"name": "Content-Type",
"value": "text/plain; charset=UTF-8"
},
{
"name": "Content-Transfer-Encoding",
"value": "quoted-printable"
}
],
"body": {
"size": 4067,
"data": "LS0tLS0tLS0tLSBGb3J3YXJkZWQgbWVzc2FnZSAtLS0tLS0tLS0tDQpGcm9tOiBMaW5rZWRJbiA8am9iLWFwcHNAbGlua2VkaW4uY29tPg0KRGF0ZTogU2F0LCBTZXAgMywgMjAxNiBhdCA5OjMwIEFNDQpTdWJqZWN0OiBBcHBsaWNhdGlvbiBmb3IgU2VuaW9yIEJhY2tlbmQgRGV2ZWxvcG..."
}

我所说的字段是 payload.parts[0].parts[0].body.data。我在一个随机点截断了它,所以我怀疑它是否可以像那样解码,但你明白了......那个编码是什么?

此外,知道他们在文档中的什么地方明确说明了它的 base64(除非它是 MIME 的标准编码?)也不会有什么坏处。

更新:所以最终还是有些运气不好。我有 5 封这样的邮件,结果发现第一封格式不正确,原因不明。在转到其他问题之后,我能够使用答案中建议的方法对所有问题进行解码。谢谢大家!

最佳答案

这是 base64。

您截断的消息是:

---------- Forwarded message ----------
From: LinkedIn <job-apps@linkedin.com>
Date: Sat, Sep 3, 2016 at 9:30 AM
Subject: Application for Senior Backend Develop

下面是一些示例代码:

我不得不从您截断的消息中删除最后 3 个字符,因为我遇到了与您相同的填充错误。您尝试解码的消息中可能有一些垃圾。

import base64

body = "LS0tLS0tLS0tLSBGb3J3YXJkZWQgbWVzc2FnZSAtLS0tLS0tLS0tDQpGcm9tOiBMaW5rZWRJbiA8am9iLWFwcHNAbGlua2VkaW4uY29tPg0KRGF0ZTogU2F0LCBTZXAgMywgMjAxNiBhdCA5OjMwIEFNDQpTdWJqZWN0OiBBcHBsaWNhdGlvbiBmb3IgU2VuaW9yIEJhY2tlbmQgRGV2ZWxv"

result = base64.b64decode(body)

print(result)

更新

这是获取和解码消息正文的片段。解码部分取自 gMail API 文档:

  message = service.users().messages().get(userId='me', id=msg_id, format='full').execute()
msg_str = base64.urlsafe_b64decode(message['payload']['body']['data'].encode('UTF8'))
mime_msg = email.message_from_string(msg_str)

print(msg_str)

引用文档: https://developers.google.com/gmail/api/v1/reference/users/messages/get#python

关于python - Gmail 邮件正文的编码是什么?如何解码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39373243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com