2016-08-29 4 views
0

전자 메일 메시지를 읽으려면 gmailAPI를 사용하고 있습니다. 반환 된 JSON에서 attachmentId를 얻은 다음 gapi.client.gmail.messages.attachments.get에 쿼리하여 첨부 파일 자체를 가져옵니다. 아래 코드를 png 첨부 파일로 테스트 중이며 JSON을 다시 가져오고 데이터 속성이 base64라고 가정하기 때문에 헤더가 말한 것입니다.attachmentid가있는 gapi.client.gmail.users.messages.attachments.get에서 첨부 파일 가져 오기

// 예, 아래 코드가 더 좋을 수도 있지만 데이터에 무엇이 들어 있는지 파악하려고합니다.

function getAttachmentContent(attachmentDict, attachmentId, isLast) { 

    var request = gapi.client.gmail.users.messages.attachments.get({ 
     'userId': 'me', 
     'messageId': getParameterByName('msgid'), 
     'id': attachmentId 
    }); 

    request.execute(function (resp) { 
     attachmentDict[attachmentId].gmailAttachmentItem.Length = resp.size; 
     attachmentDict[attachmentId].gmailAttachmentItem.Content = resp.data; 

     if (isLast) { 
      //Return only the key values as an array. 
      var attachmentArray = new Array(); 
      for (key in attachmentDict) { 
       if(key.indexOf("index") < 0) 
        attachmentArray.push(attachmentDict[key].gmailAttachmentItem); 
      } 

      emailMessage.GmailAttachments = attachmentArray.slice(0, attachmentArray.length - 1); 
     } 

    }); 
} 

attachmentid

{ 
"partId": "1", 
"mimeType": "image/png", 
"filename": "unnamed.png", 
"headers": [ 
{ 
    "name": "Content-Type", 
    "value": "image/png; name=\"unnamed.png\"" 
}, 
{ 
    "name": "Content-Description", 
    "value": "unnamed.png" 
}, 
{ 
    "name": "Content-Disposition", 
    "value": "attachment; filename=\"unnamed.png\"; size=13258; creation-date=\"Mon, 29 Aug 2016 13:34:23 GMT\"; modification-date=\"Mon, 29 Aug 2016 13:34:24 GMT\"" 
}, 
{ 
    "name": "Content-Transfer-Encoding", 
    "value": "base64" 
} 
], 
"body": { 
"attachmentId": "ANGjdJ8d3DgMc6114J2v-R16nU1biO2et7xOQZuC23BQgIXVq7v8mn-Ssn88I_zD-HOo6ArbKmv7vFe-1mkZKjNVkLPqP1n8wwhCgON-wh_BFkrArBkIU6SWN4Zh2uvKY2FQLIyCcJtyHDmZlgZB8b4MlLGiBXldpLJ0ioTH4f3De9YVuq5AxhioxbS9X2bggN2tT4YOZgXknVpBvsZ0O00Z43jAB92g3xMFqJjYeLN_l-vL0Xb73WY-xtwXWLGAPWlyD0wPq6a4Fi-qX_RWTfwMZN12AtGaLFFyrtGEKSfEo1cLKzYN8VosPPSVZHA", 
"size": 18146 
    } 
} 

I는이 응답 데이터의 내용은 base64로 이미지를 얻을 포함 된 JSON 단편?

전체 응답을 붙여 넣기가 30000 자 제한을 초과하므로 jsfiddle 링크를 사용하여 데이터를 표시하고 있습니다.

데이터 속성의 내용은 base64 이미지입니까? 그렇지 않다면 무엇입니까? Google에 따르면

attachmentid :있는 경우 별도의 messages.attachments.get 요청으로 검색 할 수있는 외부 첨부 파일의 ID가 포함됩니다. 존재하지 않을 경우 메시지 본문의 전체 내용이 데이터 필드에 포함됩니다.

크기 : 메시지 본문의 본문에있는 총 바이트 수입니다.

데이터 : MIME 메시지 부분의 본문 데이터입니다. 메시지 본문이 없거나 본문 데이터가 별도의 첨부 파일로 전송되는 MIME 컨테이너 유형의 경우 비어있을 수 있습니다. 본문 데이터가 별도의 첨부 파일에 포함되어있는 경우 첨부 파일 ID가 있습니다.

이메일 메시지를 다운로드 할 때 크기가 18146이고 첨부 파일 크기가 13258입니다. 첨부 파일 ID가 있기 때문에 첨부 파일을 사용해야합니다. gapi.client.gmail.users.messages.attachments.get 하지만 크기가 다른가요?

이메일에 첨부 된 이미지를 얻는 방법.

답변

0

현재 message.get (format = FULL)을 사용하고있는 것처럼 보입니까? 이 경우 "attachmentid"를 별도의 message.attachment.get() 호출에 제공하여 첨부 파일 내용을 검색 할 수 있습니다. 또는, message.get (format = RAW)을 호출하여 단일 응답으로 분석되지 않은 전체 전자 메일을 검색 할 수 있습니다.

+0

빠른 답장을 보내 주셔서 감사합니다. Eric. 예, format = FULL이 기본값입니다. 나는 이메일에서 주제, 본문을 원한다. 수신 된 이메일의 타임 스탬프와 FULL 형식이 도움이된다. RAW를 사용하면 base64 문자열을 디코딩하고 필요한 모든 정보를 파싱해야합니다. 결국 바이트 배열로 첨부 파일을 다른 웹 서비스로 보내야합니다. Gmail 문맥 가제트를 만들고 있습니다. 나는 내가 메시지와 가까워진 것 같은 느낌이 든다. attachachments.get 그러나 나는 데이터가 무엇인지 알 수 없다. 그것은 내가 기대하는 이미지처럼 보이지 않는다. – iJK

+0

part.body에 attachmentid 필드가있는 경우 해당 attachmentid의 messages.attachments.get() 메소드를 사용하여 첨부 파일 내용을 검색하십시오. 이 데이터는 실제 첨부 데이터가 무엇이든지 base64url로 인코딩됩니다. (첨부 파일이 image/png 인 경우 attachments.get() 및 base64url 디코드를 수행하면 바이트 수는 .png 이미지 바이트가됩니다. 크기 차이에 대해서는 모르겠지만 차이점과 관련있을 수 있습니다. 이메일의 원본 인코딩과 백엔드에서 인코딩되지 않은 방식으로 저장되는 방식 사이의 차이점) –

+0

감사합니다 Eric !! 혹시라도 가제트 유형 = "url"이 지원되는지 알고 싶습니까? https://developers.google.com/gmail/contextual_gadgets#writing_the_gadget_spec 문서에 type = "html"만 지원되지만 https://developers.google.com/gadgets/docs/fundamentals#Content_Type에는 type = "url"콘텐츠 유형은 현재 가젯. * 또는 OpenSocial API에서 완전히 지원되지 않습니다. html 형식의 제 가젯은 iframe을 추가하여 응용 프로그램을로드합니다. 여기 내 공개 질문 http://stackoverflow.com/questions/39128036/gmail-contextual-gadget-does-not-work-when-content-type-is-url입니다. – iJK

관련 문제