无法使用Gmail API + rails

时间:2018-04-03 11:47:32

标签: html ruby-on-rails google-api gmail-api

我正在构建一个应用,我使用Gmail API从Gmail中提取电子邮件。

在电子邮件中,有1张图片直接嵌入电子邮件正文中(内联图片未附件)。我能够提取文本/ html部分并在浏览器上正确显示,但在内嵌图像的情况下,它会显示损坏的图像。

在图片标记中,它显示为

<img src=\"cid:ii_jfi5vwc30_1628627122d12121\" width=\"454\" height=\"255\">

它在 src 中提供内容ID而不是图片网址。有没有人知道如何在浏览器页面中使用 cid 显示内嵌图像。我应该如何从 cid 获得base64格式的图像?

1 个答案:

答案 0 :(得分:6)

cid:用作引用附加到多部分电子邮件的图像的方式,因此该图像是电子邮件的附件,而不是内嵌在电子邮件中。这意味着要显示图像,必须查找包含参考图像的附件。

您的cid URL对应于一个Content-ID MIME header,看起来像这样:

Content-ID: <ii_jfi5vwc30_1628627122d12121>

Gmail API应该给您的响应看起来像这样:

{
  "parts": [
    // ... other parts ...
    {
      "partId": "1",
      "mimeType": "image/png",
      "filename": "",
      "headers": [
        {
          "name": "Content-ID",
          "value": "<ii_jfi5vwc30_1628627122d12121>"
        },
        {
          "name": "Content-Type",
          "value": "image/png"
        },
        {
          "name": "Content-Transfer-Encoding",
          "value": "base64"
        }
      ],
      "body": {
        "size": 9999,
        "data": "R0lGODlhGAGgAPEAAP...(the original base64 encoded image)",
      }
    }
    // ... other parts ...
  ]
  // ... rest of response ...
}

要显示图像,您需要返回响应对象并找到headername的{​​{1}}的{​​{1}} Content-ID,然后解析对象以读取其value,它是您想要的base64编码图像。

如果响应不包含此部分,则表示原始电子邮件格式不正确或相关图像未以某种方式正确附加到电子邮件上,那么您很不走运,无法渲染原始图像。