使用 Gmail API 获取邮件正文
Posted
技术标签:
【中文标题】使用 Gmail API 获取邮件正文【英文标题】:Grabbing message body with Gmail API 【发布时间】:2016-12-12 19:17:30 【问题描述】:每当我通过 API 资源管理器 (https://developers.google.com/apis-explorer/#p/gmail/v1/gmail.users.messages.get?) 发出测试请求时,我都会在 JSON 输出中得到一个包含大量正文标签的有效负载。我需要获取代表消息正文文本的正文标记,仅此而已。在每个响应中,我怎么知道是哪个 body 标签?
【问题讨论】:
【参考方案1】:您可以在payload
中的零件的mimeType
中查看类型为text/html
或text/plain
的零件:
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);
【讨论】:
【参考方案2】:他们都是。 MIME 多部分消息包含多个正文。如何将其转换为您认为的“标准”表示取决于。有时这些部分是替代品(即 HTML 与 txt),您可以选择一个。也可以是文件附件、签名等。
有关格式的详细信息,请参阅https://en.wikipedia.org/wiki/MIME#Multipart_messages。
【讨论】:
以上是关于使用 Gmail API 获取邮件正文的主要内容,如果未能解决你的问题,请参考以下文章
Gmail API:解码邮件正文(Java/Android)
如何使用 Gmail API (python) 检索整个邮件正文
使用 Gmail API 在 html 中检索电子邮件/消息正文
使用 Gmail API 发送电子邮件,在正文中编码希腊字符