我需要解析来自尽可能多的电子邮件客户端的电子邮件文本,并采取一些措施来响应电子邮件。 我需要从电子邮件中提取文本的前两行。
不幸的是,似乎几乎所有电子邮件客户端的格式都略有不同,所以我需要能够容纳尽可能多的电子邮件。
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);
}
}
请让我知道你的想法。
谢谢, 马丁