我正在开发一个基于JS / JQuery的工具来审查和分析Internet电子邮件标头。我之前创建的工具依赖于New Line分隔符的存在。我不时会收到一个客户,该客户已经发送了已经复制和粘贴足够多次\r\n
或\n
并且不再读取的Internet标头。通常由\s\s
或\s
代替。因此,没有简单或好的方法来找到每一行。
这正是我想要做的。给定可能包含或不包含正确EOL的Internet标头,如何捕获所有行或捕获各种元素(Received:
,X-Headers:
,Message-ID:
,To:
, From:
,Subject:
,Date:
)。
这是我一直在努力的小提琴:https://jsfiddle.net/Twisty/0n5tmm6L/
段
$("#clean-header").click(function(e) {
e.preventDefault();
if ($("#header-1").val() === "") {
$("#error").html("No headers submitted.");
return false;
}
$("#error").html("");
var textLines = $("#header-1").val().split('\n');
if (textLines.length > 1) {
console.log("Found " + textLines.length + " Lines ('\\n') in headers.");
return false;
} else {
console.log("No EOL found in Headers. Seeking 'Received:'.");
var s1 = /(Received):\s?from\s(.+?)\s(by.+?);\s(.+?,\s[0-9]{2}\s[a-z]{3}\s[0-9]{4}\s\d{2}:\d{2}:\d{2}.+?)\s{2}/ig;
var match, received = [];
var line = $("#header-1").val();
while (match = s1.exec(line)) {
received.push({
"from": match[2],
"by": match[3],
"stamp": match[4]
});
}
console.log("Found ", received.length, " Received Lines.");
}
});
我不怕用Pear将其推送到PHP并使用IMAP库来执行此操作。我只是希望在浏览器中完成它,而不必涉及服务器。
在没有\n
的情况下,我希望用以下正则表达式进行一些传递:
/(Received):\s?(from.+?)\s(by.+?);\s(.+?,\s[0-9]{2}\s[a-z]{3}\s[0-9]{4}\s\d{2}:\d{2}:\d{2}.+?)\s{2}/ig
/(X-.+?):(.+?)\s\s/ig
/(Reply-To|Return-Path|From):.+?<(.+?)>\s{2}/ig
/(To):.+?<(.+?)>\s{2}/ig
我永远不知道EOL会是什么,如果有的话。我还想知道是否有任何好的附加组件或库已经这样做了。到目前为止,没见过任何。建议非常欢迎。替代方案也欢迎。