【问题标题】:Inline images in Gmail with Google Apps Script使用 Google Apps 脚本在 Gmail 中内嵌图片
【发布时间】:2013-12-16 17:27:52
【问题描述】:

我正在尝试从 gmail 消息中获取内联图像,并在 Web 应用程序中使用 HTML 服务显示它们。我正在使用正则表达式从原始内容(包含 base64 编码的图像)中获取 img 标签,并使用该内容来渲染图像。但是,只要电子邮件有 4 个或更多图像标签,就会在任何“=”之后添加字符串“3D”,并且正则表达式匹配返回 null。

来自电子邮件的 img 标签示例,其中包含 3 张图片:

<img src="cid:ii_142faccc53cb2211" alt="Inline image 3" width="564" height="510">

来自电子邮件的 img 标签示例,其中包含 4 张图片:

<img src=3D"cid:ii_142face6aa5d8d86"= alt=3D"Inline image 2" width=3D"564" height=3D"317">

我尝试了几种不同的正则表达式模式,包括:

&lt;img(?:(?:.|\n)*?)\/?&gt;&lt;img.*?&gt;(.*?&lt;\/img&gt;)? 这两种方法都适用于任何包含 3 张图片的电子邮件,但不适用于 4 张或更多图片。
是什么导致“3D”被添加,我该如何解决这个问题? 3D 是“=”的 ASCII 码,我认为这可能与它有关。
谢谢

编辑:我认为导致正则表达式失败的问题与字符串的编码有关。当我收到包含 3 张或更少图片的电子邮件的原始内容时,它在 html 内容上方有以下文本行:
Content-Type: text/html; charset=ISO-8859-1
只要电子邮件中有第四张图片,就会出现:
Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
有没有人有这方面的经验以及如何解决它?

【问题讨论】:

    标签: javascript html regex google-apps-script google-api


    【解决方案1】:

    试试这个,这是一种很老套的方法,但它可能会奏效。如果您将整个源作为字符串获取,请尝试在您的字符串上使用 javascript SPLIT,使用 =3D 作为拆分。这将使用 =3D 作为分隔符将字符串拆分为数组。然后使用 JOIN 将数组重新加入到 1 个字符串中,使用 = 作为分隔符。

    arr = string.split("=3D");
    newstring = arr.join("=");
    

    我通常喜欢正则表达式,但我最近一直在使用这种方法来去除我一直在使用的长字符串中的重复元素,并且发现它非常有效。但是,如果 =3D 出现在您的用例之外,那将有一个缺点。

    【讨论】:

    • 感谢您的回答,这确实去除了 3D,但正则表达式匹配仍然返回 null,仅适用于具有 4 个或更多图像的 rawContent,我开始怀疑这是否是 Apps 脚本错误...
    【解决方案2】:

    通过使用正则表达式手动删除一些不必要的“=”符号,然后将 rawContent 视为从未编码过,设法解决了这个问题。有点破解,我仍然不确定为什么第 4 个内联图像会导致消息编码不同

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2016-06-06
      • 2017-04-07
      • 1970-01-01
      • 2022-09-25
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多