当前位置: 首页 > 知识库问答 >
问题:

GMail RESTful API:-内容传输编码不一致

齐坚成
2023-03-14

我对RESTful API和处理MIME内容都是新手。我正在尝试编写一个应用程序,从Gmail邮箱中检索消息,以便进一步处理。

我使用Google Developers API reference作为工具来熟悉API。使用以下GMail API参考中的“尝试一下”特性

https://developers.google.com/gmail/api/v1/reference/users/messages/get

我检索到一个简单的测试消息,它只有两行文本。第一行包含简单的ASCII,而第二行包含一些Unicode文本。

This the first line of body text in English only

This is second line, 中文睇到嗎 , could you see those Chinese
"parts": [
   {
    "partId": "0",
    "mimeType": "text/plain",
    "filename": "",
    "headers": [
     {
      "name": "Content-Type",
      "value": "text/plain; charset=UTF-8"
     },
     {
      "name": "Content-Transfer-Encoding",
      "value": "quoted-printable"
     }
    ],
    "body": {
     "size": 120,
     "data":  "VGhpcyB0aGUgZmlyc3QgbGluZSBvZiBib2R5IHRleHQgaW4gRW5nbGlzaCBvbmx5DQoNClRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZQ0K"
    }
   },
   {
    "partId": "1",
    "mimeType": "text/html",
    "filename": "",
    "headers": [
     {
      "name": "Content-Type",
      "value": "text/html; charset=UTF-8"
     },
     {
      "name": "Content-Transfer-Encoding",
      "value": "quoted-printable"
     }
    ],
    "body": {
     "size": 354,
     "data": "PGRpdiBkaXI9Imx0ciI-PGRpdiBjbGFzcz0iZ21haWxfZGVmYXVsdCIgc3R5bGU9ImZvbnQtZmFtaWx5OnRhaG9tYSxzYW5zLXNlcmlmIj5UaGlzIHRoZSBmaXJzdCBsaW5lIG9mIGJvZHkgdGV4dCBpbiBFbmdsaXNoIG9ubHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dGFob21hLHNhbnMtc2VyaWYiPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9kZWZhdWx0IiBzdHlsZT0iZm9udC1mYW1pbHk6dGFob21hLHNhbnMtc2VyaWYiPlRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZTwvZGl2PjwvZGl2Pg0K"
    }
   }
  ]

如您所见,虽然“content-transfer-encoding”被指定为“quoted-printable”,但返回的实际数据是base64url编码。

当我使用测试脚本通过GMail RESTful API检索消息时,我得到了相同的64BaseUrl编码响应。

编辑:基于@ericdefriez的评论

如果base64url解码“data”字段

"VGhpcyB0aGUgZmlyc3QgbGluZSBvZiBib2R5IHRleHQgaW4gRW5nbGlzaCBvbmx5DQoNClRoaXMgaXMgc2Vjb25kIGxpbmUsIOS4reaWh-edh-WIsOWXjiAsIGNvdWxkIHlvdSBzZWUgdGhvc2UgQ2hpbmVzZQ0K"

结果似乎已经是原始的utf8编码文本:

This the first line of body text in English only

This is second line, 中文睇到嗎 , could you see those Chinese
This the first line of body text in English only

This is second line, =E4=B8=AD=E6=96=87=E7=9D=87=E5=88=B0=E5=97=8E , could =
you see those Chinese

JSON响应中的'quotered-printable'CTE头似乎不正确。无论CTE头中指定了什么,数据字段始终是base64url编码的。

共有1个答案

陶炫明
2023-03-14

“data”字段对于在JSON上本地传输不一定是安全的,所以它始终是base64url编码的。一旦你base64url解码“data”,它应该匹配CTE头。

 类似资料:
  • 我有一些Java代码,它发送一封电子邮件,代码类似如下:实际上,我从Httprequest param获得了Mimemessage,在该Mimemessage中,我将在现有的主体中附加一些内容。 如果消息是text/plain和text/html content-type,我设置的content-transfer编码就不适用于body。 基于此文档 问:尽管JavaMail为我完成了所有的编码和解

  • 我使用javax邮件api在imap服务器上读取消息。我检查消息内容传输编码,因为如果有必要,我会进行mime解码。 最近,我遇到了一个问题:我的代码在消息上找不到任何内容传输编码。这怎么可能?

  • 我正在开发一个可以阅读的电子邮件查看器。eml文件并在浏览器控件中显示消息。我找到了代码片段,它可以显示7位和引用的可打印消息(内容传输编码:引用的可打印/内容传输编码:base64)。我需要的是解码8位消息。 我在谷歌上搜索了一个8位解码器,但找不到。我真的需要一个8位解码器吗?你知道一个好的解码器吗? 更新: 相关标题: 我的代码中的正文消息(字符串行): Outlook在现实世界中显示的内容

  • 目前,该电子邮件显示了有关MimeBodyPart的以下标题: 标题部分应显示以下内容: 下面是我如何尝试强制引用可打印的内容: 如何强制内容传输编码可引用打印?我正在连接我的gmail邮件服务器idk,如果这有什么区别的话。也许这个标题会被谷歌覆盖。

  • 我试图模仿我的浏览器行为在一个多部分/表单数据POST请求使用org.apache.http.entity.mime.MultipartEntityBuilder 我的浏览器只发送内容配置,但不发送内容类型或内容传输编码头。我尝试使用MultipartEntityBuilder。addPart()和addTextBody()但默认情况下都会添加这些标题: 我想要什么(我的chrome浏览器的功能)

  • 问题内容: 该代码是否有效的HTTP / 1.1? 我认为我在这里违反HTTP / 1.1?文本文件似乎确实可以正常工作,但这可能是偶然的。我的标题是“ 200 OK”还是需要为“ 100”?一个头足够吗? 问题答案: 如果要进行分块传输编码,则实际上需要设置该标头: 您可以从google返回的标头中看到该标头,该标头会对主页以及最可能的其他页面进行分块传输: 编辑 Yikes,读起来太复杂了: