【问题标题】:Get an attachment from gapi.client.gmail.users.messages.attachments.get with attachmentid从 gapi.client.gmail.users.messages.attachments.get 获取带有 attachmentid 的附件
【发布时间】:2017-01-05 22:16:54
【问题描述】:

我正在使用 gmailAPI 阅读电子邮件。从返回的 JSON 中,我得到一个 attachmentId,然后我查询 gapi.client.gmail.messages.attachments.get 以获取附件本身。我正在使用 png 附件测试下面的代码,我确实得到了 JSON,并且我假设的数据属性是 base64,因为这就是标题所说的

//是的,我知道下面的代码可能会更好,但现在我想弄清楚数据中包含什么。

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的JSON片段

{
"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 图像吗?

我正在使用 jsfiddle 链接来显示数据,因为粘贴整个响应超过了 30000 个字符的限制。

data属性中的内容是base64图片?如果不是,那是什么?根据谷歌

attachmentid:如果存在,则包含可以在单独的 messages.attachments.get 请求中检索的外部附件的 ID。如果不存在,则消息部分正文的全部内容包含在数据字段中。

大小:消息部分正文中的总字节数。

数据:MIME 消息部分的正文数据。对于没有邮件正文的 MIME 容器类型或正文数据作为单独的附件发送时,可能为空。如果正文数据包含在单独的附件中,则存在附件 ID。

我下载电子邮件时返回的大小 18146 与附件大小 13258 不同。存在 Attachmentid,所以当我使用 gapi.client.gmail.users.messages.attachments.get 时我应该获取附件大小不一样?

我如何获取附加到电子邮件的图像。

【问题讨论】:

    标签: gmail-api


    【解决方案1】:

    看起来您目前正在使用 message.get(format=FULL) 进行呼叫?在这种情况下,可以将“attachmentid”提供给单独的 message.attachment.get() 调用以检索附件内容。或者,您也可以调用 message.get(format=RAW) 在单个响应中检索整个未解析的电子邮件。

    【讨论】:

    • 感谢 Eric 的快速回复。是的,我使用的是 format=FULL,这是默认设置。我确实想要电子邮件的主题、正文和收到的电子邮件的时间戳,并且完整格式会有所帮助。如果我使用 RAW,那么我将不得不解码 base64 字符串并解析我需要的所有信息。我最终需要将附件作为字节数组发送到不同的 Web 服务。我正在构建一个 gmail 上下文小工具。我觉得我与 message.attachments.get 很接近,但我无法弄清楚数据是什么,它看起来不像我期望的图像。
    • 如果 part.body 中有 attachmentid 字段,那么是的,使用该 attachmentid 上的 messages.attachments.get() 方法来检索附件内容。无论实际附件数据是什么,该数据都是 base64url 编码的。 (因此,如果附件是图像/png,一旦您将 attachments.get() 和 base64url 解码,那么您拥有的字节将是 .png 图像字节。我不确定大小差异,可能与差异有关在电子邮件中的原始编码和它在后端未编码的存储方式之间。)
    • 谢谢埃里克!!您是否会碰巧知道 gadget type="url" 是否受支持?这里developers.google.com/gmail/… 文档说只支持 type="html" 但这里developers.google.com/gadgets/docs/fundamentals#Content_Type 它说 type="url" 内容类型目前不完全被小工具*或 OpenSocial API 支持。我的 html 类型的小工具添加了一个 iframe 来加载应用程序。这是我的未决问题stackoverflow.com/questions/39128036/…
    猜你喜欢
    • 2015-10-13
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 2011-02-22
    • 2020-10-12
    • 1970-01-01
    相关资源
    最近更新 更多