你如何获得所有的电子邮件正文部分?你怎么知道有多少部分存在?

时间:2014-10-08 01:05:11

标签: api email gmail gmail-api

我正在尝试阅读Gmail API响应的电子邮件。

我无法访问所有“部件”。并且没有很好的方法来遍历响应。我也失去了可以存在多少部分,这样我就可以确保正确阅读不同的电子邮件回复。我缩短了下面的回复......

  

{“payload”:{“mimeType”:“multipart / mixed”,“filename”:“”,   ],“body”:{“size”:0},“parts”:[{

"body": {
 "size": 0
},
"parts": [
 {
  "partId": "0.0",
  "mimeType": "text/plain",
  "filename": "",
  "headers": [
   {
    "name": "Content-Type",
    "value": "text/plain; charset=\"us-ascii\""
   },
   {
    "name": "Content-Transfer-Encoding",
    "value": "quoted-printable"
   }
  ],
  "body": {
   "size": 2317,
   "data": "RGVhciBNSVQgQ2x1YiBWb2x1bnRlZXJzIGluIEFzaWEsDQoNCkJ5IG5vdyBlYWNoIG9mIHlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBpbnZpdGF0aW9ucyB0byB0aGUgcmVjZXB0aW9ucyBpbiBib3RoIFNpbmdhcG9yZSBhbmQgSG9uZyBLb25nIHdpdGggUHJlc2lkZW50IFJlaWYgb24gTm92ZW1iZXIgNyBhbmQgTm92ZW1iZXIg"
  }
 },
 {
  "partId": "0.1",
  "mimeType": "text/html",
  "filename": "",
  "headers": [
   {
    "name": "Content-Type",
    "value": "text/html; charset=\"us-ascii\""
   },
   {
    "name": "Content-Transfer-Encoding",
    "value": "quoted-printable"
   }
  ],
  "body": {
   "size": 9116,
   "data": "PGh0bWwgeG1sbnM6dj0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiIHhtbG5zOm89InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIgeG1sbnM6dz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6d29yZCIgeG1sbnM6bT0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjA"
  }
 }
]    },    {
"partId": "1",
"mimeType": "text/plain",
"filename": "",
"body": {
 "size": 411,
 "data": "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NClRoYW5rIHlvdSBmb3IgYWxsb3dpbmcgdXMgdG8gcmVhY2ggeW91IGJ5IGVtYWlsLCB0aGUgbW9zdCBpbW1lZGlhdGUgbWVhbnMgZm9yIHNoYXJpbmcgaW5mb3JtYXRpb24gd2l0aCBNSVQgYWx1bW5pLiANCklmIHlvdSB3b3VsZCBsaWtlIHRvIHVuc3Vic2NyaWJlIGZyb20gdGhpcyBtYWlsaW5nIGxpc3Qgc2VuZCBhIGJsYW5rIGVtYWlsIHRvIGxpc3RfdW5zdWJzY3JpYmVAYWx1bS5taXQuZWR1IGFuZCBwdXQgdGhlIGxpc3QgbmFtZSBpbiB0aGUgc3ViamVjdCBsaW5lLg0KRm9yIGV4YW1wbGU6DQpUbzogbGlzdF91bnN1YnNjcmliZUBhbHVtLm1pdC5lZHUNCkNjOg0KU3ViamVjdDogYXNpYW9mZg0K"
}    }   ]  } }

我有什么遗失的吗?

4 个答案:

答案 0 :(得分:2)

MIME消息不仅仅是一个数组,它还是一个完整的树形结构。因此,您必须遍历它才能正确处理它。幸运的是,JSON解析器很多,并且可以通过递归轻松处理问题。在许多语言中,存在非常有用的电子邮件解析库,可以使访问传统部分(例如text / plain或text / html可显示部分或附件)不太费力。

答案 1 :(得分:0)

您要查找的MIME部分位于数组中。 JSON没有预先告诉您数组中有多少项。即使MIME本身也没有提供一种在不查看整个消息的情况下知道存在多少部分的方法。您只需遍历整个阵列就可以知道其中有多少个零件,并在遇到它时处理每个零件。

答案 2 :(得分:0)

要知道存在多少部分,您可以使用Length属性。

示例:

json.payload.parts.length

对于您的示例,此属性为2,因为有2个部分。

答案 3 :(得分:0)

你必须设置walker函数来遍历json并选出你所追求的位。这是我写的部分内容。这可以帮助您快速启动代码。注意:这是在wordpress内部使用...因此特殊的jQuery调用。如果你不需要在wordpress中使用jquery,则不需要。

function makeApiCall() {
gapi.client.load('gmail', 'v1', function() {
    //console.log('inside call: '+myquery);
  var request = gapi.client.gmail.users.messages.list({
    'userId': 'me',
    'q': myquery
  });
  request.execute(function(resp) {
    jQuery(document).ready(function($) {
          //console.log(resp);
          //$('.ASAP-emailhouse').height(300); 
          $.each(resp.messages, function(index, value){
                messageId = value.id;
                var messagerequest = gapi.client.gmail.users.messages.get({
                    'userId': 'me',
                    'id': messageId
                  });//end var message request
                messagerequest.execute(function(messageresp) {
                    //console.log(messageresp); 
                    $.each(messageresp, responsewalker);
                    function responsewalker(key, response){
                        messagedeets={};
                        $.each(messageresp.payload.headers, headerwalker);
                        function headerwalker(headerkey, header){
                            if(header.name =='Date'){
                                d = new Date(header.value);
                                var curr_date = d.getDate();
                                var curr_month = d.getMonth() + 1; //Months are zero based
                                var curr_year = d.getFullYear();
                                var formatteddate = curr_month+'/'+curr_date+'/'+curr_year;
                                messagedeets['date']=formatteddate;
                                //$('.ASAP-emailhouse').append('<p>'+header.value+'</p>');
                            }
                            if(header.name =='Subject'){
                                //console.log(header.value);
                                messagedeets.subject=header.value;
                            }
                        }
                        messagedeets.body = {};
                        $.each(messageresp.payload.parts, walker);
                        function walker(partskey, value) {
                            //console.log(value.body);
                            if (value.body.data !== "undefined") {
                                //console.log(value.body);
                                var messagebody = atob(value.body.data);
                                messagedeets.body.partskey = messagebody;
                            }
                        console.log(messagedeets);
                        $('.ASAP-emailhouse').append('<div class="messagedeets"><p class="message-date">'+messagedeets.date+': <span class="message-subject">'+messagedeets.subject+'</span></p><p>'+messagedeets.body.partskey+'</p></div>');
                        }//end responsewalker
                        //$('.ASAP-emailhouse').append('</li>');
                    }
                    //$('.ASAP-emailhouse').append('</ul>');
                });//end message request
            });//end each message id
      });//end jquery wrapper for wordpress
  });//end request execute list messages
});//end gapi client load gmail

}