2011-03-16 55 views
8

我正在處理一個電子郵件管道腳本,需要只保存回覆內容而不是原始引用的電子郵件。我正在使用一個mime解析器類(http://www.phpclasses.org/package/3169-PHP-Decode-MIME-e-mail-messages.html)從電子郵件中獲取我需要的所有信息:PHP - 過濾電子郵件正文,刪除回覆引用

Message ID: [email protected] 
Reply ID: [email protected] 

Subject: Re: MessageX 
To: [email protected] 
From: Someone [email protected] 

Body: Hello, 
Blah Blah Blah 
-Someone 

On Wed, Mar 16, 2011 at 3:52 PM, <[email protected]> wrote: 
> Hello, 
> 
> Some other blah, blah, blah. 
> 
> Thank you, 
> Me 

在正文部分,我收到了原始引用的電子郵件。我如何過濾掉?我知道電子郵件客戶端經常在引用的內容旁邊添加「>」,但我不確定這是否足夠好。謝謝你的幫助。

+2

這聽起來有點像你正在做某種客戶支持類型的電子郵件回覆系統的東西。我經常在原文中看到類似「=============回覆高於此行==================」的字符串發送電子郵件到「客戶」,然後可以很容易地找到並將刪除所有*的答覆報價。這顯然可能不是你想要做的,但它也可能是你的有效選擇。 – 2011-03-16 22:21:08

回答

9

這可能適用於正則表達式。嘗試:

$text = preg_replace('#(^\w.+:\n)?(^>.*(\n|$))+#mi', "", $text); 
+0

感謝您的快速回答,目前效果很好。有沒有這種情況可能無效? – davishmcclurg 2011-03-16 22:25:57

+0

肯定有電子郵件客戶端允許或使用郵件中的逐字逐句。或者,如果您通過電子郵件發送源代碼或差異等。爲了使其更具彈性,您可以在正則表達式中交換最後一個'{2,}'的''。因此,它只會匹配至少兩個連續的'>'線,這是一個明確的標誌,它是一個引用的部分。 – mario 2011-03-16 22:30:06

+0

有沒有永遠是這個問題的完美解決方案。它可能(儘管不太可能)在電子郵件中看到回覆內容。考慮[此片段](http://pastebin.com/ZyJvBMbn)的第10至13行(我修改了您的原始示例)。很可能,這些線路最終會被刪除。 – 2011-03-16 22:46:07