2010-09-08 115 views
1

我從POP服務器檢索原始文本(包括標題和消息)。我需要捕獲標題之後的所有內容,標題之間以空行和用戶消息之間的空白行結束。提取電子郵件數據的正則表達式模式

與此同時,我想要忽略來自原始郵件的任何內容,如果它是回覆。爲我解析開始電子郵件的回覆與

------Original Message------ 

開始一個例子電子郵件可能看起來像這樣

返回路徑:...
...
更多電子郵件元數據:...

你好,來自正則表達式土地,我很高興收到你的來信。
------原始郵件------
元數據:...
...

嘿夥計正則表達式,你能幫幫我嗎?謝謝!

此致,我。

我需要提取「來自正則表達式的問候語,我很高興收到您的來信。」和原始郵件之前的任何其他文本/行。

我現在正在使用這個正則表達式(C#在多行模式下),它似乎工作,除了它捕獲------原始消息------如果主體是空白的。我寧願只是有一個空白的字符串。

^\s*$\n(.*)(\n------Original Message------)? 

編輯
我沒有投下來的人,如果你碰巧downvote,它通常是有幫助的,包括註釋。

回答

0

爲什麼你不使用DotnetOpenMail?使用正則表達式做,這是一種錯誤的做法,你會更好使用專用的電子郵件處理程序代替....

+0

我使用,我被告知要使用,而不是獲取信息爲目的(POP3客戶端,我會更喜歡),我只能檢索每條消息的原始文本。否則,這不會是一個問題。 – jlafay 2010-09-08 14:37:45

+0

呃......這對於這個使用正則表達式沒有任何意義...你使用的是什麼pop3客戶端 - 那個pop3客戶端應該正在處理消息正文的處理等等否則正則表達式不會是需要! – t0mm13b 2010-09-08 14:45:24

+0

謝謝你試圖幫助tommie。那麼讓我們從這個角度來說吧。我有PO3郵件客戶端代碼,我將它擴展爲爲從POP服務器檢索的每條消息實例化一個MailMessage對象。現在我正在編寫方法來提取部分原始文本以保存對象屬性。 – jlafay 2010-09-08 14:46:55

0

這樣做的原因是,你必須在括號內的額外\n。如果身體是空白的,那裏沒有額外的換行符。因此,試試這個:

^\s*$\r\n(.*)(^------Original Message------$)? 

如果你不想在身體的末端換行,你仍然可以使用string.Trim()上匹配的部分。

注意:這裏假定輸入使用\r\n行結束符(根據MIME標準在電子郵件標題中需要)。

+0

這產生了相同的結果。 – jlafay 2010-09-08 14:39:35

+0

@jlafay:對,對不起。它應該是'\ r \ n'而不是'\ n'。更新了答案。 – Timwi 2010-09-08 14:51:03

-1

您需要(?=(\n------Original Message------))先行更換(\n------Original Message------)有來無回的那部分,只是爲了確保它的存在

+0

這樣比較好。問題是它沒有考慮不包含「原始消息」的電子郵件。非常接近,謝謝。 – jlafay 2010-09-08 14:46:10

+0

除了「原始消息」以外,還有什麼替代終結符? – 2010-09-08 14:48:32

+0

我只是希望它在原始消息行之前停止捕獲。並非所有的電子郵件都會有這一行,只是大部分都會。所以如果這條線不存在,它是一個新的電子郵件,而不是一個回覆。我想要所有這些。 – jlafay 2010-09-08 14:54:40