解析已剥离EOL的电子邮件标头

时间:2016-01-21 23:52:58

标签: php jquery regex

我正在开发一个基于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会是什么,如果有的话。我还想知道是否有任何好的附加组件或库已经这样做了。到目前为止,没见过任何。建议非常欢迎。替代方案也欢迎。

0 个答案:

没有答案