2013-08-24 70 views
0

我目前正在嘗試解析郵件txt存檔文件。這些文件具有通過列表連接在一個文件中的所有電子郵件。該結構是這樣的:解析郵件存檔

From SOMETHING 
From: SOMETHING 
Date: SOMETHING 
Subject: SOMETHING 
In-Reply-To: SOMETHING 
Message-ID: <SOMETHING> 

CONTENT 



From SOMETHING 
From: SOMETHING 
Date: SOMETHING 
Subject: SOMETHING 
In-Reply-To: SOMETHING 
Message-ID: SOMETHING 

CONTENT 


[...] 

的問題是,CONTENT可以包含換行符。所以我不能簡單地將消息分解成消息,然後解析每條消息。

我嘗試分析這是:

def parseContent(content): 
    import re 
    pattern = r"From (.*)\n"+\ 
       "From: (.*)\n"+\ 
       "Date: (.*)\n"+\ 
       "Subject: (.*)\n"+\ 
       "In-Reply-To: (.*)\n"+\ 
       "Message-ID: (.*)\n"+\ 
       "(.*)" 
    matches = re.findall(pattern, content) 

    for from1, from2, date, subject, inreply, messageid, body in matches: 
     print from1 
     print body 
     print "#"*20 
    return matches 

body不包含郵件正文中,但只有一個換行符。我如何讓最後一個匹配組匹配一切,但只要上面的部分匹配,身體匹配組不應該匹配?

+0

消息之間是否有明確的分隔符?例如'\ n \ n'或類似的? –

+0

我對此不確定。我認爲'\ n \ n'總是在消息之間,但問題在於它也可能在消息體內。 –

+0

所以理論上你可以有一個電子郵件包含6個標題行_in content_權利?我不知道是否有任何強大的方法來解析這個... – Shep

回答

2

你這裏有兩種選擇:

  1. 有打開,讀取和寫入郵差檔案標準庫模塊。 mailbox模塊是您想要的模塊,特別是mailbox.mbox看起來應該是您想要的模塊。

  2. 在郵遞員存檔中,每封郵件都以字符串​​開頭。這絕不會發生在郵件正文中,因爲From字符串將以大於符號(>)爲前綴。請注意,郵件標題(帶冒號的行)由RFC-2822定義,不屬於郵箱格式。我相信RFC不會爲郵件標題指定任何特定的順序。