2

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

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


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

/html>

我想<html>text/html. 我该怎么做呢?

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

4

3 回答 3

5

根据 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);
于 2012-07-03T21:43:47.720 回答
3

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

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

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

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

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

于 2012-07-04T15:11:44.957 回答
2
var html = source.toString().substr(source.toString().indexOf("\n\n")).trim();
于 2012-07-03T21:12:31.717 回答