2012-04-20 70 views
1

我需要解析电子邮件正文(可以是文本和html),转发电子邮件,以查找电子邮件的原始发件人(姓名和电子邮件地址)。以PHP解析转发的电子邮件正文

因此,让我们说约翰发送电子邮件给史蒂夫,史蒂夫转发给马特。 因此,在大多数的客户信息会看起来像:

From: John Smith [mailto:[email protected]] 
Sent: 02 March 2012 AM 01:23 
To: 'Steve' 
Subject: Hello Steve 

或者

---------- Forwarded message ---------- 
From: John Smith <[email protected]> 
Date: 02 March 2012 AM 01:23 
Subject: Hello Steve 
To: Steve <[email protected]> 

那么,怎样才能从我的名字和电子邮件从价值观在这些2箱子提取?请注意,我只需要提取此文本的第一个外观,因为可以有多行“From:...”的外观。

+0

如何以及从哪里获取原始格式的电子邮件? – 2012-04-20 11:07:49

+0

我从IMAP服务器收到消息,它们不是原始格式,但消息正文包含这些行,我需要解析才能获取有关原始发件人的信息。 – Ivica 2012-04-20 12:46:53

回答

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