不同响应的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);

+0

那么有没有办法让类似的反应?我不得不假定附件id会在一个部分或另一部分? –

+1

@LiorNaar没错。它将根据消息类型,附件数量等而有所不同。最简单的方法就是遍历所有这些附件。通常没有那么多的零件,所以没什么大不了的。 – Tholle

+0

Gmail API消息只是模仿电子邮件的MIME结构,该电子邮件是基于嵌套MIME“multipart/*”容器可以任意复杂的树。例如,如果某人附加了一封附带电子邮件的电子邮件,该电子邮件中包含PDF。 –