2014-10-08 73 views
0

我正在嘗試閱讀Gmail API響應的電子郵件。你如何獲得所有的電子郵件正文部分?你怎麼知道有多少部分存在?

我無法訪問所有「零件」。並沒有很好的方法來遍歷答案。我也失去了多少部分可以存在,所以我可以確保我正確閱讀不同的電子郵件回覆。我已經縮短下面的響應...

{ 「有效載荷」:{ 「mime類型」: 「多部分/混合的」, 「文件名」: 「」, ]中, 「身體」:{ 「大小」 :0}, 「零件」:[{

"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" 
} } ] } } 

有我丟失的東西?

回答

0

您正在查找的MIME部件位於數組中。 JSON並不會告訴您陣列中有多少物品。即使MIME本身也不提供一種知道有多少零件存在的方法,而無需查看整個消息。您只需遍歷整個數組以知道其中有多少個零件,並在您遇到它時處理每個零件。

+0

我知道了,謝謝。我認爲有方法可以輕鬆遍歷json? – echan00 2014-10-08 01:17:38

+0

有很多JSON解析器可用,我相信你可以找出你選擇的編程語言。如果性能和/或內存使用率存在問題,請嘗試查找支持類SAX解析模型的解析器。 – 2014-10-08 01:38:21

+0

我最終決定只採用RAW格式的電子郵件,並使用Ruby電子郵件解析器(郵件寶石)來解決這個問題。 – echan00 2014-10-08 18:40:45

2

MIME消息不僅僅是一個數組,它是一個完整的樹狀結構。所以你必須遍歷它才能正確處理它。幸運的是JSON解析器非常豐富,可以通過遞歸輕鬆地處理問題。在很多語言中,存在非常有用的電子郵件解析庫,可以使訪問傳統部分(例如text/plain或text/html可顯示部分或附件)不太費力。

0

要知道存在多少零件,只需使用Length屬性即可。

實施例:

json.payload.parts.length 

對於示例,該屬性是2,因爲有2個部分。

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 

}

相關問題