Gmail 对类似请求的不同响应 API
Different response on similar requests Gmail API
我正在尝试通过从某些邮件中获取附件来处理来自 Gmail API 的响应 object:
在我的 Gmail 帐户中,我有 2 个标签:
Label_1
Label_2
两条消息都从不同的网络服务获取每日报告,我使用 Gmail API 首先获取消息列表,同时我使用标签和查询搜索字符串(q 字段)过滤消息,其中包含某个日期(这就是我在请求列表时只收到一条消息的方式)
通过响应 object 我能够获取消息 ID,然后使用消息 ID 发送另一个请求。
我想下载附件,所以在响应中 object 我正在搜索响应的 Payload.Parts 字段 object
在 Label_1 响应中 - Payload.Parts[0] 包含文件名字段,Payload.Parts[0]。Body 包含附件 ID
在 Label_2 响应中 - Payload.Parts[1].Parts[0] 包含文件名并且相同。Body 包含附件 ID。
我的问题是:为什么会这样?
为什么在一个响应中我在第一个 Payload.Parts 中得到了想要的字段,而在第二个中我必须深入 object 的字段?
我还注意到,在 Label_1 响应中,我收到了一个 HTTP header,但我没有收到我认为可能相关的第二个响应:DKIM-Signature
有什么想法吗?
谢谢。
您得到的响应只是解析为 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);
我正在尝试通过从某些邮件中获取附件来处理来自 Gmail API 的响应 object:
在我的 Gmail 帐户中,我有 2 个标签: Label_1 Label_2
两条消息都从不同的网络服务获取每日报告,我使用 Gmail API 首先获取消息列表,同时我使用标签和查询搜索字符串(q 字段)过滤消息,其中包含某个日期(这就是我在请求列表时只收到一条消息的方式)
通过响应 object 我能够获取消息 ID,然后使用消息 ID 发送另一个请求。
我想下载附件,所以在响应中 object 我正在搜索响应的 Payload.Parts 字段 object
在 Label_1 响应中 - Payload.Parts[0] 包含文件名字段,Payload.Parts[0]。Body 包含附件 ID
在 Label_2 响应中 - Payload.Parts[1].Parts[0] 包含文件名并且相同。Body 包含附件 ID。
我的问题是:为什么会这样? 为什么在一个响应中我在第一个 Payload.Parts 中得到了想要的字段,而在第二个中我必须深入 object 的字段?
我还注意到,在 Label_1 响应中,我收到了一个 HTTP header,但我没有收到我认为可能相关的第二个响应:DKIM-Signature
有什么想法吗?
谢谢。
您得到的响应只是解析为 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);