【问题标题】:Is there a way to distingush inline picture and picture attachment via Gmail API有没有办法通过 Gmail API 区分内联图片和图片附件
【发布时间】:2023-01-13 09:53:13
【问题描述】:

我通过他们的 API 从 Gmail 中提取了两封电子邮件,一封包含内嵌图片,另一封包含图片附件。请参阅下面的 HTTP 响应。

通过比较这两个部分,我无法分辨哪些图片是附加的,哪些是内联的。 “Content-Disposition”显示两者都是附件,尽管其中一个实际上是内联照片。

有没有办法通过 Gmail API 中的 response 识别内联图片?

// inline
      {
        "partId": "2",
        "mimeType": "image/heic",
        "filename": "image_50410497.JPG",
        "headers": [
          {
            "name": "Content-Type",
            "value": "image/heic; name=\"image_50410497.JPG\""
          },
          {
            "name": "Content-Disposition",
            "value": "attachment; filename=\"image_50410497.JPG\""
          },
          {
            "name": "Content-Transfer-Encoding",
            "value": "base64"
          },
          {
            "name": "X-Attachment-Id",
            "value": "18334b929992fd46a211"
          },
          {
            "name": "Content-ID",
            "value": "\u003c18334b929992fd46a211\u003e"
          }
        ],
        "body": {
          "attachmentId": "ANGjdJ8FshN6fd_2OoZEttwPYHk_8q1mVOJevilskBM-6yOZZ6aMMSMblU3Vo5pw-V1_SeDzxkVx0zOg5R-9fGkaSGvGzd6Wi9yVBe4dAn03HDCghyUWFC2jyodeWYmttzzaXyCNRUVPdVxmO7l8yTaeEsQ4Ep1Ze7Nc3bnLNozWHeKZQHQLqGyfLKDdEI1GKjT8X6OuyEY6EWMo8djE30c-BvYjuY95vmomjkjzfoIqTFfpUlMMktNUfvC1SZMHL0arymXmTTM6uVg5N0U2TngVfbKNx0x8hI0bhccB-AiIhwrSqCxM_CZkyXrGRcY",
          "size": 2607632
        }
      },
// attached
      {
        "partId": "1",
        "mimeType": "image/jpeg",
        "filename": "unnamed.jpeg",
        "headers": [
          {
            "name": "Content-Type",
            "value": "image/jpeg; name=\"unnamed.jpeg\""
          },
          {
            "name": "Content-Disposition",
            "value": "attachment; filename=\"unnamed.jpeg\""
          },
          {
            "name": "Content-Transfer-Encoding",
            "value": "base64"
          },
          {
            "name": "Content-ID",
            "value": "\u003cf_l83jtl4x0\u003e"
          },
          {
            "name": "X-Attachment-Id",
            "value": "f_l83jtl4x0"
          }
        ],
        "body": {
          "attachmentId": "ANGjdJ_6KFGMzvKW6XFwD4BaSjCDSQGWPEMpL97DE1Lx31cKi2cSzSTOMDIdTEV8wyvnLiB8iqg5_1CVlDOOofl4NiEll2IwrxDuE-IdDXP9PmryOXbMp0pFgIQ961UQWQk8yhObqPcx8xWnqQaPWI3pwirH6hhoe3JtswoLXQ1NDs7FjJZ2iivLZHoTvMlh-i4VQIK6JVaEdIcQBejI6WruTi7DuC_ZpRwewfReZ2JsPKtncVCFwOkb0Ov1vElLS7Y1BTATiRzurXQw1A4lYOn5-XDKqXk90p_HxEQO5zEsvdz2MigVSa803-mIvK8RFTyOOuA4iVWEzad0I3mEFVE6bxTfFQ_YnAYm1FLKImnMEkJf5MuyZofZleyu8fjTGGqzvWmjikDGLvAzdM2O",
          "size": 1553427
        }
      }

更新:

Max 提到了“Content-ID”,我可以确认它适用于我拥有的一些电子邮件,这是一个示例:

// header of the attachment part
{
  "name": "Content-ID",
  "value": "\u003cii_l83jb7dh0\u003e"
}

// decoded HTML body
<img src="cid:ii_l83jb7dh0" alt="20190906-2P2A3622.jpeg" width="361" height="542"><br>

【问题讨论】:

  • @Max 谢谢,请随时发表您的评论作为答案,我会接受。顺便说一句,这听起来效率不高,因为我需要对 HTML 正文进行 base64 解码,然后搜索每个附件的 CID 字符串以确认这一点。
  • @HaoXi Content-Disposition应该告诉你它是否是 inline,但它并不总是被正确使用,所以你只需要认真对待并深入分析附件在电子邮件的其余部分中实际是如何使用的。至少,如果附件在 multipart/related MIME 部分内,那么它很可能是 inline,因为它应该与另一个 MIME 部分“相关”(通常'text/html' MIME 部分)。但这并不能保证。附件已分配 Content-ID 的事实也不是,因为实际上可能会或可能不会引用该 ID。

标签: imap gmail-api email-attachments mime


【解决方案1】:

有时,唯一区分它们的是消息的 HTML 正文中是否引用了 Content-ID。更准确地说,根据任何合理的定义,该图像是附件,但它也可以在 HTML mime 部分的 &lt;img&gt; 标记中作为 cid: url 引用。仅标题信息无法告诉您这一点。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 1970-01-01
    • 2017-05-11
    • 2020-04-01
    • 2018-08-25
    • 2023-04-10
    • 2021-04-19
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多