gmail-api - 在哪里可以找到取决于 mimeType 的电子邮件正文

标签 gmail-api

我正在向 User.messages 端点发出请求。返回的所有对象(电子邮件)都有一个我很难理解的 mimeType 属性。

更具体地说,我希望能够根据 mimeType 提取电子邮件的正文,因为我已经注意到根据 mimeType,正文将在 body 内。房产在payload ,或在 parts阵列。可以返回哪些不同的 mimeType,我在哪里可以找到每个 mimeType 的电子邮件正文?

最佳答案

如果你想到 payload,我认为这是有道理的。作为 part就其本身而言。假设我发送了一个只有一个主题和一个简单的消息文本的消息:

From: emtholin@gmail.com
To: emtholin@gmail.com
Subject: Example Subject

This is the plain text message

这将导致以下解析消息:
{
 "id": "154ecb53c10b74d8",
 "threadId": "154ecb53c10b74d8",
 "labelIds": [
  "INBOX",
  "SENT"
 ],
 "snippet": "This is the plain text message",
 "historyId": "38877",
 "internalDate": "1464260181000",
 "payload": {
  "partId": "",
  "mimeType": "text/plain",
  "filename": "",
  "headers": [
   ...
  ],
  "body": {
   "size": 31,
   "data": "VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCBtZXNzYWdlCg=="
  }
 },
 "sizeEstimate": 355
}

如果我发送包含纯文本部分、html 部分和图像的消息,解析后将如下所示:
{
 "id": "154ed5ccaa12f3df",
 "threadId": "154ed5ccaa12f3df",
 "labelIds": [
  "SENT",
  "INBOX",
  "IMPORTANT"
 ],
 "snippet": "This is a plain/html message with an image.",
 "historyId": "841379",
 "internalDate": "1464271162000",
 "payload": {
  "mimeType": "multipart/mixed",
  "filename": "",
  "headers": [
     ...
  ],
  "body": {
   "size": 0
  },
  "parts": [
   {
    "mimeType": "multipart/alternative",
    "filename": "",
    "headers": [
     {
      "name": "Content-Type",
      "value": "multipart/alternative; boundary=089e0122896c7c80d80533bf3205"
     }
    ],
    "body": {
     "size": 0
    },
    "parts": [
     {
      "partId": "0.0",
      "mimeType": "text/plain",
      "filename": "",
      "headers": [
       {
        "name": "Content-Type",
        "value": "text/plain; charset=UTF-8"
       }
      ],
      "body": {
       "size": 47,
       "data": "VGhpcyBpcyBhIHBsYWluL2h0bWwgKm1lc3NhZ2UqIHdpdGggYW4gaW1hZ2UuDQo="
      }
     },
     {
      "partId": "0.1",
      "mimeType": "text/html",
      "filename": "",
      "headers": [
       {
        "name": "Content-Type",
        "value": "text/html; charset=UTF-8"
       }
      ],
      "body": {
       "size": 73,
       "data": "PGRpdiBkaXI9Imx0ciI-VGhpcyBpcyBhIHBsYWluL2h0bWwgPGI-bWVzc2FnZTwvYj4gd2l0aCBhbiBpbWFnZS48L2Rpdj4NCg=="
      }
     }
    ]
   },
   {
    "partId": "1",
    "mimeType": "image/png",
    "filename": "smile.png",
    "headers": [
       ...
    ],
    "body": {
     "attachmentId": "ANGjdJ-OrSy7VAYL-UbRyNtmySbZLlV-fV43zJF0_neNGZ8yKugsZAxb32eSb-CrbYIhF9NvjGwBVEjSkRrUWoCS7aDpgoQnt9WR7f2sa17qVEyOg_JVSbrGrunirvQw2dY-SxxB3Y0JP3aYDHSBXpNO6fFCByVFWQDw1et5Mh9di7bGO4AWOLKFVe_Yb2RmdDwuazGXGb8zA88TTMaiEPIacPTNiVtBrIWG0EKGxHBhep9j8ujyWeCS5P9X80dBHvBNj4T9XjUwcrN6FvwegRewRMM9cBupY7jQESR7915OcbhCNyi5l64x6vVh1ZU",
     "size": 2002
    }
   }
  ]
 },
 "sizeEstimate": 3077
}

您将看到它只是解析为 JSON 的 RFC822 消息。如果你只是遍历parts ,并治疗 payload作为 part本身,你会找到你要找的东西。
var parts = [response.payload];

while (parts.length) {
  var part = parts.shift();
  if (part.parts) {
    parts = parts.concat(part.parts);
  }

  if(part.mimeType === 'text/html') {
    var decodedPart = decodeURIComponent(escape(atob(part.body.data.replace(/\-/g, '+').replace(/\_/g, '/'))));
    console.log(decodedPart);
  }
}

关于gmail-api - 在哪里可以找到取决于 mimeType 的电子邮件正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37445865/

相关文章:

java - 你如何使用 gmail java api 获取 gmail 用户的电子邮件地址?

python - 将电子邮件数据导入列表在 100 处停止

javascript - Gmail API 附件 Base64url 解码

http - 如何将访问 token 参数发布到 Gmail api

unit-testing - 您如何为连接到授权帐户的库编写测试?

java - GoogleAccountCredential getSelectedAccountName() 在设置并实现权限后返回 null

gmail - 从 GMail Web 界面查找 api 消息 ID

curl - 400 错误。需要收件人地址。 curl

python - 没有使用Python对Gmail API进行全身按摩