Gmail returns base64 编码但列为可引用可打印

Gmail returns base64 encoded but lists as quotable printable

当我调用 Gmail API 时,我得到以下回复(显然只是摘录,因为 body 很大:

{
  ...
  payload: {
    ...
    parts: [
      {
        "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": 4696,
             "data": "PCFET0NUWVBFIGh0bWw-PGh0bWwgbGFuZz1lbj48....

我刚刚包含了相关部分。您会看到 html body 部分将电子邮件编码为 base64Url,但脚趾内容传输编码明确表示 quoted-printable。我通过 base64url 解码器 运行 它给出了正确的数据。但是 header 明确表示它是 quoted-printable

我错过了什么?

最简单的 body 部分就是这个,看起来完全正确。

"headers": [
 ...
{
 "name": "Content-Transfer-Encoding",
 "value": "base64"
}   ],
"body": {
 "size": 601,
 "data": "R29vZ2xlIEFQSXMgRXhwbG9yZXIgd2FzIGdyYW5

当您请求 Message resource, the Gmail API can deliver message data in one of four formats that you can set via a query string (see documentation).

以下是对每个格式选项的描述,摘自官方文档:

  • "full": Returns the full email message data with body content parsed in the payload field; the raw field is not used. (default)
  • "metadata": Returns only email message ID, labels, and email headers.
  • "minimal": Returns only email message ID and labels; does not return the email headers, body, or payload.
  • "raw": Returns the full email message data with body content in the raw field as a base64url encoded string; the payload field is not used.

"full" 是默认选项,其中 body 内容被解析并自动存储为数据 属性 中的 base64 编码字符串。

请记住,提供消息资源 object 是为了方便与 RFC5322 有效载荷交互,并且它始终在 base64 中提供其数据有效载荷,而不管其上的值如何Content-Transfer-Encoding header.

如果您想使用原始 IMF(Internet Message Format - RFC5322) 文本,请在查询字符串中将格式设置为“raw”。您必须对原始字符串进行 base64 解码才能获取 IMF 数据。它看起来完全符合您的预期,但您必须编写自己的解析器来管理其内容。