2016-08-29 94 views
0

我正在使用gmailAPI來閱讀電子郵件。從返回的JSON中,我得到一個attachmentId,然後查詢gapi.client.gmail.messages.attachments.get來獲取附件本身。我正在使用png附件測試下面的代碼,並且我得到了JSON,並且我假設的數據屬性是base64,因爲這是標題所示的內容從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); 
     } 

    }); 
} 

其中包含附件ID

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

我得到這個響應和數據內容是它的base64形象的JSON片段?

我使用jsfiddle鏈接來顯示數據,因爲粘貼整個響應超過了30000個字符的限制。

數據屬性中的內容是base64圖像?如果不是,那是什麼?根據谷歌

附件:如果存在,包含可以在單獨的messages.attachments.get請求中檢索的外部附件的ID。當不存在時,消息部分主體的全部內容包含在數據字段中。

大小:消息部分正文中的字節總數。

數據:MIME消息部分的正文數據。對於沒有消息正文的MIME容器類型或正文數據作爲單獨附件發送時,可能爲空。如果正文數據包含在單獨的附件中,則附件ID存在。

當我下載電子郵件消息18146時,我收到的大小與附件大小13258不同。附件存在,所以當我使用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字符串並解析我需要的所有信息。我最終需要將附件作爲字節數組發送到不同的Web服務。我正在構建一個gmail上下文小工具。我覺得我與message.attachments.get很接近,但我無法弄清楚數據是什麼,它看起來不像我期待的圖像。 – iJK

+0

如果part.body中存在附加字段,那麼使用附件中的messages.attachments.get()方法來檢索附件內容。該數據是base64url編碼的任何實際的附件數據。 (所以,如果附件是一個圖像/ 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它表示目前,小工具*或OpenSocial API完全不支持type =「url」內容類型。我的類型爲html的小工具添加了一個iframe來加載應用程序。這是我的開放問題http://stackoverflow.com/questions/39128036/gmail-contextual-gadget-does-not-work-when-content-type-is-url – iJK