2011-07-06 67 views
5

我有郵件,需要通過PHP imap函數獲取正文,然後將其存儲在數據庫中。這些郵件來自響應系統。我使用此代碼來獲取電子郵件只使用imap_body獲取電子郵件正文的某個部分

$bodyText = imap_fetchbody($mbox,$v,1.2); 
if(!strlen($bodyText)>0){ 
    $bodyText = imap_fetchbody($mbox,$v,1); 
} 

這工作完全,但也包含原始郵件正文的身體,有沒有辦法只能得到答覆。

整個郵件正文是這樣的

**This is a test 
-- 
Kind Regards, 



-----Original Message----- 
From: ------------- 
To:-------------------------- 
Subject: You have received a reply to your enquiry 
New System 
Date: Tue, 5 Jul 2011 16:24:28 +0200 
Good day, 
You have received the following reply to an enquiry you made 
------------------------------------------------------------------------------------------------- 
test3  

-------------------------------------------------------------------------------------------------- 
To reply to this comment please click on the Reply To button and add the message you wish to send.** 

有沒有辦法讓只有消息的身體沒有原始郵件使用IMAP功能或其他PHP函數?

回答

0

你嘗試過一個

substr($wholeMessage, 0, strpos($wholeMessage, 0, "-----Original Message-----")); 

這將削減從一開始的消息最多的地方----原始消息---字符串開始。骯髒的,但可能會對服務器您的需求

編輯:我假設你只有一個MIME部分..如果你有幾個,您只需保存你需要

+0

它總會有一個MIME部分,我已經在做的時刻是什麼你建議,因爲這對我來說是最有意義的,我唯一擔心的是,在不同的電子郵件客戶端中,當有人回覆郵件時,郵件始終有字符串-----原始郵件-----原始郵件 – Roland

+0

不這麼認爲,我認爲你不應該指望這一點。代碼示例與您在問題中所說的內容有關,從我的理解來看,郵件來自「響應系統」,所以我認爲它始終是相同的格式 – marcelog

+0

是來自響應系統,所以不能應該有相同的郵件存儲兩次 – Roland

1

的那些有一種此處的博客文章:http://www.damnsemicolon.com/php/php-parse-email-body-email-piping解決了這個問題。它使用衆所周知的電子郵件客戶端回覆格式來最好地猜測回覆主體是什麼。由於您無法控制正在使用的電子郵件客戶端,因此您可以獲得儘可能好的結果。

只需注意,鏈接代碼使用from和to name/email來更好地解析電子郵件地址。你可以得到這些值,像這樣:

$headerInfo = imap_headerinfo($mbox,$v); 

$fromEmail = $headerInfo->from->personal; 
$fromName = $headerInfo->from->mailbox . "@" . $headerInfo->from->host; 
$toEmail = $headerInfo->to->personal; 
$toName = $headerInfo->to->mailbox . "@" . $headerInfo->to->host; 

編輯:鏈接似乎是死了,這裏是谷歌的緩存:http://webcache.googleusercontent.com/search?q=cache:5MxzHXFU5TkJ:www.damnsemicolon.com/php/php-parse-email-body-email-piping+&cd=1&hl=en&ct=clnk&gl=ca

相關問題