【问题标题】:Parse text/html part of email source using Javascript使用 Javascript 解析电子邮件源的文本/html 部分
【发布时间】:2012-07-04 08:11:12
【问题描述】:

使用 javascript,我需要解析电子邮件的 Content-Type text/html 部分并仅提取 HTML 部分。以下是相关邮件源部分的示例:

------=_Part_1504541_510475628.1327512846983
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit


<html ... a bunch of html ...

/html>

我想在text/html 之后提取&lt;html&gt; 标签之间(包括)之间的所有内容。我该怎么做?

注意:我可以使用 hacky 正则表达式。我不认为这是防弹的。

【问题讨论】:

    标签: javascript regex email mime


    【解决方案1】:

    根据 RFC/MIME 文档,封装边界被定义为一行完全由两个连字符(“-”,十进制代码 45)组成的行,后跟来自 Content-Type 标头字段的边界参数值。

    注意:在 JavaScript 中确实没有 /s 修饰符来使点 . 匹配所有字符,包括换行符。要绝对匹配任何字符,您可以使用包含速记类及其否定版本的字符类,例如 [\s\S]


    正则表达式:

    \n--[^\n\r]*\r?\nContent-Type: text\/html[\s\S]*?\r?\n\r?\n([\s\S]*?)\n\r?\n--
    

    JavaScript:

    matches = /\n--[^\n\r]*\r?\nContent-Type: text\/html[\s\S]*?\r?\n\r?\n([\s\S]*?)\n\r?\n--/gim.exec(mail);
    

    【讨论】:

      【解决方案2】:

      Ωmega 的答案很接近,但您不能确定边界是否包含- 字符。

      您首先需要查看标题。实际电子邮件内容的标题和正文将由\r\n\r\n 分隔。您应该会看到类似

      的标题
      Content-Type: multipart/alternative;
          boundary="------=_Part_1504541_510475628.1327512846983"
      

      然后您可以使用此边界来找到实际的分隔线。然后,您可以像 Ωmega 一样构造一个正则表达式,但在此分隔符中进行替换。

      唯一需要注意的是,除了正常的边界内容之外,最后一个边界的末尾还会有--

      【讨论】:

      • 史蒂夫,我已经用文档中的注释编辑了我的答案 - 边界必须以至少两个 - 字符开头...
      【解决方案3】:
      var html = source.toString().substr(source.toString().indexOf("\n\n")).trim();
      

      【讨论】:

        猜你喜欢
        • 2011-02-04
        • 2014-11-08
        • 2013-04-06
        • 2016-04-12
        • 2016-12-18
        • 2013-11-03
        • 1970-01-01
        • 2018-01-26
        • 1970-01-01
        相关资源
        最近更新 更多