我目前正在尝试解析Mailman txt-archive文件。这些文件包含通过列表连接在一个文件中的所有电子邮件。结构是这样的:
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 :(得分:2)
这里有两个选项:
有一个标准的库模块可以打开,读取和写入邮件存档。 mailbox
模块是您想要的模块,特别是mailbox.mbox
看起来应该是您想要的模块。
在邮件存档中,每封邮件都以字符串\nFrom
开头。这将永远不会出现在消息正文中,因为From
字符串将以大于号(>
)作为前缀。请注意,邮件头(带冒号的行)由RFC-2822定义,不属于邮箱格式。我认为RFC没有为消息头指定任何特定的顺序。