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

时间:2012-07-03 20:25:05

标签: javascript regex email mime

使用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>

我希望在<html>之后提取{和{包括} text/html代码之间的所有内容。我该怎么做?

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

3 个答案:

答案 0 :(得分:3)

基于RFC / MIME文档,封装边界被定义为一个完全由两个连字符(“ - ”,十进制代码45)组成的行,后跟Content-Type头字段中的边界参数值< / em>的

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

答案 1 :(得分:3)

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

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

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

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

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

答案 2 :(得分:2)

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