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