工作需要,写了一个类,读取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值相同!