在服务器端JS和单独的文本行中解析电子邮件回复

时间:2018-07-30 19:36:13

标签: javascript html email

我需要解析来自尽可能多的电子邮件客户端的电子邮件文本,并采取一些措施来响应电子邮件。 我需要从电子邮件中提取文本的前两行。

不幸的是,似乎几乎所有电子邮件客户端的格式都略有不同,所以我需要能够容纳尽可能多的电子邮件。

Gmail,Outlook,Synology Email都大致相同:

> <div dir="ltr">1st line
>     <div>2nd line
>     </div> </div> <br> <div class="gmail_quote">
>     <div dir="ltr">On Mon, 30 Jul 2018 at 13:52, Anonymoys
>         <<a href="mailto:Anonymoys">Anonymoys@email.com</a>> wrote:
>             <br>
>     </div>
>     <blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
>         <div style="font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10pt">test
> 
>             <hr><strong>From: </strong>
>             <a href="mailto:Anonymoys@email.com" target="_blank">Anonymoys@email.com</a>
>             <br> <strong>Sent: </strong>26/06/2018 4:38 PM GMT+01:00
>             <br> <strong>To: </strong>Anonymoys (
>             <a href="mailto:Anonymoys@email.com" target="_blank">Anonymoys@email.com</a>)
>             <br> <strong>Subject: </strong>Mail Subject>
>             <br>   
>             <div dir="ltr">text
>             </div> 
>             <div class="gmail_extra">
>             ...
>             </div>
>         </div> </div>

来自iPhone和Macbook电子邮件客户端的代码不同:

> 1st line\r\n2nd line @@@@ 2nd part of 2nd line\r\n\r\n--
> \r\n\r\n\r\n\r\n\r\n

我需要一种统一的方法来从电子邮件中获取前2条测试行。

UPDATE1: 我可以在客户端使用DOM使其正常工作,但我需要在服务器端使用它。无论如何-如果有人在客户端需要它,这里是:

var str = '1st line\r\n2nd line @@@@ 2nd part of 2nd line\r\n\r\n--\r\n\r\n\r\n\r\n\r\n';
var arr = [];
var span= document.createElement('span');
span.innerHTML= str;

var arr = [];
var allElements = span.getElementsByTagName('*');
if (allElements.length <= 0) {
    arr = str.split('\n');
} else {
    for (var i = 0; i < allElements.length; i++) {
        if (allElements[i].firstChild) {
            arr.push(allElements[i].firstChild.textContent.split('\n'))
        } else {
            arr.push(allElements[i].innerText.split('\n'))
        }
    }
}

UPDATE2: 我非常肮脏的服务器端解决方案:

    var strFullMessage = '1st line\r\n2nd line @@@@ 2nd part of 2nd line\r\n\r\n--\r\n\r\n\r\n\r\n\r\n';
    var arrLines = [];
    arrLines = strFullMessage.split(/(<([^>]+)>)/ig) || arrLines.push(strFullMessage);
    if (arrLines.length > 100) {arrLines.length = 100};
    for (var i = 0; i < arrLines.length; i++) {
        if (arrLines[i].match(/(<([^>]+)>)/ig)) {
            arrLines.splice(i, 1);
            arrLines.splice(i, 1);
        }
    }
    if (arrLines[0] == '') {
        arrLines.splice(0, 1);
    }
    for (var x = 0; x < arrLines.length; x++) {
        if (arrLines[x].indexOf('\n') != -1) {
            var newArr = arrLines[x].split('\n');
            var counter = 0;
            for (var y = 0; y < newArr.length; y++) {
                counter++;
                arrLines.splice(x+counter,0,newArr[y])
            }
            arrLines.splice(x,1);
        }
    }

请让我知道你的想法。

谢谢, 马丁

0 个答案:

没有答案