不同响应的Gmail API
问题描述:
我试图处理来自Gmail的API响应对象从特定的消息越来越附件:不同响应的Gmail API
在我的Gmail帐户我有2个标签: Label_1 Label_2
这两个消息从不同的Web服务获得每日报告,并且即时通过使用Gmail API来首先获得消息列表,同时使用标签和包含特定日期的查询搜索字符串(q字段)过滤消息(这是我如何获得当我要求列表时,只有一条消息)
与响应对象Im能够获取消息标识,然后发送另一个带有消息标识的请求。
我要下载的附件,因此在响应对象IM搜索的响应对象
的Payload.Parts领域Label_1响应 - Payload.Parts [0]包含文件名域和Payload.Parts [ 0] .Body contains the attachment ID
In Label_2 response - Payload.Parts [1] .Parts [0]包含文件名,相同的.Body包含attachmentID。
我的问题是:为什么会发生这种情况? 为什么在一个响应中,我在第一个Payload.Parts中获得想要的字段,而在第二个中,我必须在对象的字段中更深入?
我也注意到,在Label_1响应我收到一个HTTP标头,我不明白的第二个,我认为可能涉及:DKIM签名
有什么想法?
谢谢。
答
您得到的响应只是解析为JSON的RFC822消息。该消息可能是multipart/mixed
,multipart/related
,text/html
或类似的东西。这是最好的,所以你检查各部位的有效载荷来编写代码:
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
}
}
]
}
};
// In e.g. a plain text message, the payload is the only part.
var parts = [response.payload];
var attachmentIds = [];
while (parts.length) {
var part = parts.shift();
if (part.parts) {
parts = parts.concat(part.parts);
}
if(part.body && part.body.attachmentId) {
attachmentIds.push(part.body.attachmentId);
}
}
console.log(attachmentIds);
那么有没有办法让类似的反应?我不得不假定附件id会在一个部分或另一部分? –
@LiorNaar没错。它将根据消息类型,附件数量等而有所不同。最简单的方法就是遍历所有这些附件。通常没有那么多的零件,所以没什么大不了的。 – Tholle
Gmail API消息只是模仿电子邮件的MIME结构,该电子邮件是基于嵌套MIME“multipart/*”容器可以任意复杂的树。例如,如果某人附加了一封附带电子邮件的电子邮件,该电子邮件中包含PDF。 –