email.parser.
Parser()的parsestr()和parse()方法都可以用来从原始邮件文件中提取邮件头信息。这两个方法的区别就parsestr处理的是字符串对象,parse处理的是文件对象。
让我们通过两个例子来了解这两个方法的使用。先来看一封邮件的原始信息的一部分:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
cat
/
tmp
/
email_test1.txt
date: Wed,
16
Nov
2016
16
:
04
:
44
+
0800
From:
3456789
<
3456789
@qq.com>
To:
1234567
<
1234567
@qq.com>
Cc:
23456780
<
23456780
@qq.com>
Reply
-
To:
3456789
<
3456789
@qq.com>
Subject: email test!
X
-
Priority:
3
X
-
Has
-
Attach: no
X
-
Mailer: Foxmail
7.0
.
1.91
[cn]
Mime
-
Version:
1.0
Message
-
ID
: <
201611161604440653250
@qq.com>
Content
-
Type
: multipart
/
alternative;
boundary
=
"----=_001_NextPart245273401224_=----"
|
例1:通过parsestr提取邮件头
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#!/usr/bin/python
import
os
from
email.parser
import
Parser
def
read_mail(path):
if
os.path.exists(path):
with
open
(path) as fp:
email
=
fp.read()
return
email
else
:
print
"file not exist!"
raw_email
=
read_mail(
'/tmp/email_test1.txt'
)
#将邮件读到一个字符串里面
headers
=
Parser().parsestr(raw_email)
#经过parsestr处理过后生成一个字典
print
'Cc: %s'
%
headers[
'Cc'
]
print
'To: %s'
%
headers[
'to'
]
print
'From: %s'
%
headers[
'from'
]
print
'Subject: %s'
%
headers[
'subject'
]
|
例2:通过parse提取邮件关
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/python
from
email.parser
import
Parser
headers
=
Parser().parse(
open
(
'/tmp/email_test1.txt'
,
'r'
))
print
'Cc: %s'
%
headers[
'Cc'
]
print
'To: %s'
%
headers[
'to'
]
print
'From: %s'
%
headers[
'from'
]
print
'Subject: %s'
%
headers[
'subject'
]
|
两个例子的返回的结果都是一样的:
1
2
3
4
|
Cc:
23456780
<
23456780
@qq.com>
To:
1234567
<
1234567
@qq.com>
From:
3456789
<
3456789
@qq.com>
Subject: email test!
|
这样我们就完成了邮件头部信息的提取!
本文转自 emma_cql 51CTO博客,原文链接:http://blog.51cto.com/chenql/1873770