在PHP中解析转发的电子邮件正文

时间:2012-04-20 11:02:30

标签: php regex parsing email

我需要解析电子邮件正文(可以是文本和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:...”行的外观。

1 个答案:

答案 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:|<)(.*?)(?:[\]>])$/