Python:一个类,读取邮件文件,然后返回其指定的部分,例如Subject, Date, Body, attachementsname or attachement....

工作需要,写了一个类,读取email文件,然后分析其时间,主题,文件内容,和附件文件名称以及提取附件。这个类可以用于命令行,也可以用于网页。写下来,和大家一同学习,记得以前学习过一个提取附件并保存为文件的脚本,结果,附件名前的空格被自动取消掉了,这个类也可以提取附件,并保存文件,如果从邮件的结构中文件名是怎样的,保存的文件名就是怎样的。

类的名称叫EMAIL:

1. getDate() 返回邮件的时间戳。

2. getSubject()  返回邮件的主题

3. getBody()  返回邮件的内容

4. getAttachNames()  返回附件民(以元祖的形式

5. getAttachLoc(fname)  输入附件名称(从方法4中获得),一次提取一个附件,并保存在/tmp下,返回文件的地址。

 1 #!/usr/bin/env python
 2 "File: emaildisplay -- "
 3 "display email on the web page or on cmd line"
 4 
 5 import sys
 6 import os
 7 import email
 8 
 9 
10 class EMAIL(object):
11     """input email file, and output relative parts of it. such as header, body, attachment..."""
12     def __init__(self, emailpath):
13         try:
14             self.emailPath=emailpath
15             self.msg=email.message_from_file(open(emailpath))
16             self.body=""
17             self.filenames=[]
18             for i in self.msg.walk():
19                 if i.get_content_type() == 'text/html': # !
20                     self.body=i
21                 if i.get_filename() is not None:
22                     self.filenames.append(i.get_filename())
23         except IOError:
24             sys.exit()
25     def getDate(self):
26         return self.msg.get('Date')
27 
28     def getSubject(self):
29         return self.msg.get('Subject')
30 
31     def getBody(self):
32         return self.body
33 
34     def getAttachNames(self):
35         """return a tuple of attachName"""
36         return tuple(self.filenames)
37 
38     def getAttachLoc(self, fname=None):
39         """work like `ripmime -i`, attachment location is in /tmp/mid
40            if attchments are multi, return a tuple of locations
41         """
42         for i in self.msg.walk():
43             if i.get_filename() is not None and i.get_filename == fname:
44                 fpath=os.path.join("/tmp", i.get_filename())
45                 try:
46                     f=open(fpath, "wb")
47                     f.write(base64.b64decode(i.get_payload()))
48                     f.close()
49                 except IOError:
50                     return False
51         return fpath    

 

 附件存为文件后和 ripmime -i 提取的附件使用md5sum获取md5值相同!

 

 

 

转载于:https://www.cnblogs.com/nathaninchina/archive/2012/09/04/2661597.html

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页