使用 Javascript 解析电子邮件源的文本/html 部分
Posted
技术标签:
【中文标题】使用 Javascript 解析电子邮件源的文本/html 部分【英文标题】:Parse text/html part of email source using Javascript 【发布时间】: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
之后提取<html>
标签之间(包括)之间的所有内容。我该怎么做?
注意:我可以使用 hacky 正则表达式。我不认为这是防弹的。
【问题讨论】:
【参考方案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();
【讨论】:
以上是关于使用 Javascript 解析电子邮件源的文本/html 部分的主要内容,如果未能解决你的问题,请参考以下文章
当我使用 codeigniter 电子邮件类发送电子邮件时显示 html 源的电子邮件
JavaScript 从批量文本中提取电子邮件(使用正则表达式,JavaScript和jQuery)
Linux Shell编程实战---解析文本中的邮件地址和url