2014-10-08 3 views
0

Gmail API에서 응답 한 이메일을 읽으려고합니다.이메일 본문 부분을 어떻게 얻습니까? 그리고 얼마나 많은 부품이 있는지 어떻게 알 수 있습니까?

모든 "부품"에 액세스하는 데 문제가 있습니다. 그리고 응답을 통해 트래버스하는 좋은 방법이 없습니다. 또한 얼마나 많은 부분이 존재할 수 있는지에 관해서도 분실되어 있으므로 다른 전자 메일 응답을 올바르게 읽을 수 있습니다. { "mimeType를": "다중/혼합", "파일 이름": "", ] "몸": { "크기"나는

{ "페이로드"... 응답 아래 단축했습니다 : 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

+0

JSON 파서를 사용할 수있는 곳이 많습니다. 선택한 프로그래밍 언어를 찾을 수있을 것입니다. 성능 및/또는 메모리 사용량이 문제가되는 경우 SAX와 유사한 구문 분석 모델을 지원하는 파서를 찾으십시오. –

+0

나는 이메일을 RAW 포맷으로 가져 와서이를 처리하기 위해 Ruby Email Parser (mail gem)를 사용하기로 결정했다. – echan00

2

MIME 메시지는 단순한 배열이 아니며 완전히 날아간 트리 구조입니다. 따라서 올바르게 처리하려면 트래버스해야합니다. 다행히도 JSON 파서가 풍부하고 재귀를 통해 문제를 쉽게 처리 할 수 ​​있습니다. 많은 언어에서 전통적인 부품 (예 : text/plain 또는 text/html 표시 가능 부품 또는 첨부 파일)을 너무 힘들이지 않게 액세스 할 수있는 매우 유용한 이메일 구문 분석 라이브러리가 있습니다.

0

얼마나 많은 부품이 있는지 알고 싶다면 Length 속성을 사용할 수 있습니다.

예 :이 개 부분이 있기 때문에 귀하의 예를 들어

json.payload.parts.length 

,이 건물은 2입니다.

0

json을 통과하기 위해 워커 기능을 설정하고 이후의 비트를 선택해야합니다. 여기에 내가 쓴 것의 일부가있다. 이렇게하면 코드를 빠르게 시작할 수 있습니다. 참고 :이 wordpress의 내부에 사용됩니다 ... 따라서 특수 jQuery 전화. 워드 프레스에서 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 

은}

관련 문제