提问者:小点点

用Gmail抓取邮件正文API


每当我通过API资源管理器(https://developers.google.com/apis-explorer/#p/gmail/v1/gmail.users.messages.get?)发出测试请求时,我都会得到一个有效负载,它在JSON输出中包含许多body标签。我需要获取代表消息正文文本的body标签,而不是其他任何东西。我如何知道在每个响应中,那是哪个body标签?


共2个答案

匿名用户

您可以检查payload中零件的mimeType以查找类型为text/htmltext/平原的零件:

var response = {
 "payload": {
  "parts": [
   {
    "mimeType": "multipart/alternative",
    "filename": "",
    "headers": [
     {
      "name": "Content-Type",
      "value": "multipart/alternative; boundary=001a1142e23c551e8e05200b4be0"
     }
    ],
    "body": {
     "size": 0
    },
    "parts": [
     {
      "partId": "0.0",
      "mimeType": "text/plain",
      "filename": "",
      "headers": [
       {
        "name": "Content-Type",
        "value": "text/plain; charset=UTF-8"
       }
      ],
      "body": {
       "size": 9,
       "data": "V293IG1hbg0K"
      }
     },
     {
      "partId": "0.1",
      "mimeType": "text/html",
      "filename": "",
      "headers": [
       {
        "name": "Content-Type",
        "value": "text/html; charset=UTF-8"
       }
      ],
      "body": {
       "size": 30,
       "data": "PGRpdiBkaXI9Imx0ciI-V293IG1hbjwvZGl2Pg0K"
      }
     }
    ]
   },
   {
    "partId": "1",
    "mimeType": "image/jpeg",
    "filename": "feelthebern.jpg",
    "headers": [
     {
      "name": "Content-Type",
      "value": "image/jpeg; name=\"feelthebern.jpg\""
     },
     {
      "name": "Content-Disposition",
      "value": "attachment; filename=\"feelthebern.jpg\""
     },
     {
      "name": "Content-Transfer-Encoding",
      "value": "base64"
     },
     {
      "name": "X-Attachment-Id",
      "value": "f_ieq3ev0i0"
     }
    ],
    "body": {
     "attachmentId": "ANGjdJ_2xG3WOiLh6MbUdYy4vo2VhV2kOso5AyuJW3333rbmk8BIE1GJHIOXkNIVGiphP3fGe7iuIl_MGzXBGNGvNslwlz8hOkvJZg2DaasVZsdVFT_5JGvJOLefgaSL4hqKJgtzOZG9K1XSMrRQAtz2V0NX7puPdXDU4gvalSuMRGwBhr_oDSfx2xljHEbGG6I4VLeLZfrzGGKW7BF-GO_FUxzJR8SizRYqIhgZNA6PfRGyOhf1s7bAPNW3M9KqWRgaK07WTOYl7DzW4hpNBPA4jrl7tgsssExHpfviFL7yL52lxsmbsiLe81Z5UoM",
     "size": 100446
    }
   }
  ]
 }
};

function decode(string) {
  return decodeURIComponent(escape(atob(string.replace(/\-/g, '+').replace(/\_/g, '/'))));
}

function getText(response) {
  var result = '';
  // In e.g. a plain text message, the payload is the only part.
  var parts = [response.payload];

  while (parts.length) {
    var part = parts.shift();
    if (part.parts) {
      parts = parts.concat(part.parts);
    }
    if (part.mimeType === 'text/plain') {
      // Continue to look for a 'text/html' part.
      result = decode(part.body.data);
    } else if (part.mimeType === 'text/html') {
      // 'text/html' part found. No need to continue.
      result = decode(part.body.data);
      break;
    }
  }
  
  return result;
}


var text = getText(response);
console.log(text);

匿名用户

它们都是。MIME多部分消息包含多个主体。如何将其转换为您认为的“标准”表示取决于。有时这些部分是替代方案(即超文本标记语言与txt),您可以选择一个。它也可以是文件附件、签名等。

有关格式的详细信息,请参见https://en.wikipedia.org/wiki/MIME#Multipart_messages。