📄 cutfox.py
字号:
################# cutfox.py ################
#!/usr/bin/python
# -*- coding: gbk -*-
from __future__ import generators
import string, sys, os, time, os.path
import email, email.Header, email.Utils
defaultencoding = 'gbk'
foxseperator = '\020\020\020\020\020\020\020\021\021\021\021\021\021S\n'
def eachmail(fp):
""" in: file-like object fp, which points to a Foxmail .BOX file
return: generator to iterate over each mail in fp"""
result = []
for line in fp:
if len(line) >= 15 and line[-15:] == foxseperator:
if len(line) > 15:
result += [line[0:-15]]
if result:
yield result
result = []
else:
result += [line]
if result:
yield result
def showhelp():
print """Usage: cutfox.py file.BOX"""
def decodename(subject):
if not subject:
return ''
subject = ''.join(map(lambda pair: unicode(pair[0],
pair[1] or defaultencoding, 'replace'),
email.Header.decode_header(subject)))
subject = subject.encode(defaultencoding, 'replace')
return string.strip(subject)
def decodefilename(name):
name = decodename(name)
name = string.translate(name,
string.maketrans('\t?*:<>|/\\\'"', ' __________'))
return string.strip(name)
def dumpmultipart(message, savepath, defaultname):
if not os.path.exists(savepath):
os.mkdir(savepath)
if savepath[-1] <> os.sep:
savepath += os.sep
for part in message.get_payload():
partname = decodefilename(part.get_param('name'))
if not partname:
partname = defaultname
while os.path.exists(savepath + partname):
partname += '_'
if part.is_multipart():
dumpmultipart(part, savepath,
defaultname)
else:
fp = open(savepath + partname, 'wb')
fp.write(part.get_payload(decode=1))
fp.close()
if __name__ == '__main__':
if len(sys.argv) == 2:
filename = sys.argv[1]
savepath = 'mail.' + filename + os.sep
if not os.path.exists(savepath):
os.mkdir(savepath)
i = 0
for mail in eachmail(open(filename, 'r')):
i+=1
mail = ''.join(mail)
print i, len(mail),
message = email.message_from_string(mail)
if message.is_multipart():
print 'Multipart',
else:
print 'Singlepart',
subject = decodefilename(message['Subject']) or 'Untitled'
date = message['Date']
if not date:
date = message['Received']
date = string.strip(date[date.index(';')+1:])
date = email.Utils.parsedate(date)
date = time.strftime('%Y.%m.%d.%H.%M', date)
print date+'_'+subject
savepath2 = savepath + date + '_' + subject
#savepath2 = savepath2[:255]
date = message['Date']
if not date:
date = message['Received']
date = string.strip(date[date.index(';')+1:])
if message.is_multipart():
if not os.path.exists(savepath2):
os.mkdir(savepath2)
fp = open(savepath2 + os.sep + 'mailinfo', 'w')
fp.write("%s\n%s\n%s\n%s\n\n" % ('From: '+
decodename(message['From'] or 'Unknown'),
'To: ' + decodename(message['To'] or 'Unknown'),
'Subject: ' +
decodename(message['Subject'] or 'Untitled'),
'Date: ' + date))
fp.close()
dumpmultipart(message, savepath2, subject)
else:
fp = open(savepath2, 'wb')
fp.write("%s\n%s\n%s\n%s\n\n" % ('From: '+
decodename(message['From'] or 'Unknown'),
'To: ' + decodename(message['To'] or 'Unknown'),
'Subject: ' +
decodename(message['Subject'] or 'Untitled'),
'Date: ' + date))
fp.write(message.get_payload(decode=1))
fp.close()
else:
showhelp()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -