无法使用Gmail API + rails以HTML格式显示嵌入图像

Mee*_*eSN 18 html ruby-on-rails google-api gmail-api

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

在电子邮件中,有1个图像直接嵌入电子邮件正文(内联图像不附件).我能够提取text/html部分,并且它在浏览器上正确显示,但是在内嵌图像的情况下,它显示了破碎的图像.

在图片标签中,它显示为

<img src=\"cid:ii_jfi5vwc30_1628627122d12121\" width=\"454\" height=\"255\">
Run Code Online (Sandbox Code Playgroud)

它在src中提供内容id而不是image url .有谁知道我应该如何使用浏览器页面中的cid显示内嵌图像.我该如何从cid获取base64格式的图像?

Bil*_*Mei 6

cid:用作引用附加到多部分电子邮件的图像的方式,以便图像是电子邮件中的附件,而不是嵌入在电子邮件中.这意味着要显示图像,您必须查找哪个附件包含引用的图像.

您的cidURL对应于Content-ID MIME标头,如下所示:

Content-ID: <ii_jfi5vwc30_1628627122d12121>
Run Code Online (Sandbox Code Playgroud)

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 ...
}
Run Code Online (Sandbox Code Playgroud)

为了显示图像,需要通过响应对象回去,找到headernameContent-IDvalueii_jfi5vwc30_1628627122d12121,然后解析对象,以便读取它body.data,这是编码你想要的图像以base64.

如果响应不包含此部分,则表示原始电子邮件格式错误或相关图像未以某种方式正确附加到电子邮件中,然后您运气不佳并且无法呈现原始图像.