我需要解析电子邮件正文(可以是文本和HTML),转发电子邮件,找到电子邮件的原始发件人(包括姓名和电子邮件)。
所以,让我们说John向Steve发送电子邮件,Steve转发给Matt。 因此,在大多数客户端中,消息将如下所示:
From: John Smith [mailto:john@example.com]
Sent: 02 March 2012 AM 01:23
To: 'Steve'
Subject: Hello Steve
或者
---------- Forwarded message ----------
From: John Smith <ejohn@example.com>
Date: 02 March 2012 AM 01:23
Subject: Hello Steve
To: Steve <steve@example.com>
那么,在这两种情况下,如何从名称和电子邮件值中提取?请注意,我只需要提取此文本的第一个外观,因为可以有多个“From:...”行的外观。
答案 0 :(得分:3)
使用正则表达式
/^From:\s+(.*?)\s*(?:\[mailto:|<)(.*?)(?:[\]>])$/
您将获得第一个匹配名称和第二个匹配电子邮件地址
<?php
$string = "...";
$pattern = '/^From:\s+(.*?)\s*(?:\[mailto:|<)(.*?)(?:[\]>])$/mi';
preg_match($pattern, $string, $matches);
print_r($matches);
?>
有时在名称联系的开头和结尾还有'
或"
。要消除这种情况,请使用:
/^From:\s+["']?(.*?)["']?\s*(?:\[mailto:|<)(.*?)(?:[\]>])$/