⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cutfox.py

📁 用python语言用来解析foxmail邮件的内容
💻 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 + -