使用 Javascript 解析电子邮件源的文本/html 部分

Parse text/html part of email source using Javascript

本文关键字:文本 html 部分 Javascript 电子邮件 使用      更新时间:2023-09-26

使用javascript,我需要解析电子邮件的内容类型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之后提取<html>标签之间的所有内容(包括)。我该怎么做?

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

根据 RFC/MIME 文档,封装边界定义为完全由两个连字符("-",十进制代码 45)组成的行,后跟来自内容类型标头字段的边界参数值

注意:在 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);

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

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

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

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

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

var html = source.toString().substr(source.toString().indexOf("'n'n")).trim();