导出前一天所有用户草稿箱中的邮件
1 #!/usr/bin/python 2 # -*- coding:utf-8 -*- 3 import subprocess 4 import datetime 5 import re 6 import os 7 import tarfile 8 import time 9 import shutil 10 11 # 邮件导出 目录结构说明 12 # /home/coremail/ExportUserDraftBoxEml 13 # --> user@domain目录 14 # ------> eml格式的文件 15 16 17 exportEmlDir = '/home/coremail/ExportUserDraftBoxEml' 18 nowDateTime = datetime.datetime.now().strftime("%Y%m%d") 19 loggerFile = '/tmp/exportEmlForDraftBox.log.%s' % nowDateTime 20 21 22 # 日志 23 def logger(context): 24 with open(loggerFile, 'a+') as f: 25 f.write(context + '\n') 26 f.flush() 27 print context 28 29 30 # 压缩 生成list标志文件 上传压缩包 上传list文件 删除exportEmlDir目录 31 def compressFile(): 32 compressfilename = 'MAIL_EML_RJZX_%s.tar.gz' % nowDateTime 33 compressfilefullpath = '/home/coremail/%s'% compressfilename 34 # print compressfilename 35 # print compressfilefullpath 36 logger('[-] compress file %s' % compressfilefullpath) 37 with tarfile.open(compressfilefullpath, 'w:gz') as tar_f: 38 tar_f.add(exportEmlDir) 39 40 # 生成list标志文件 压缩包名字 和 文件大小 41 listFile = '/home/coremail/MAIL_EML_RJZX_%s.list' % nowDateTime 42 with open(listFile, 'w') as f: 43 f.write('%s: %sKB' % (compressfilename, os.stat(compressfilefullpath).st_size) + '\n') 44 45 # 5秒后再删除文件 46 time.sleep(5) 47 if os.path.isdir(exportEmlDir): 48 logger('[-] delete directories file %s' % exportEmlDir) 49 # shutil.rmtree(exportEmlDir) 50 if os.path.isfile(compressfilefullpath): 51 logger('[-] delete tar file %s' % compressfilefullpath) 52 # os.remove(compressfilefullpath) 53 54 print '[+] list file save to %s' % listFile 55 56 57 # 列出用户草稿箱的邮件 58 def listUserDraftBoxMail(coremailuser): 59 msgYesterdayDate = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y%m%d") # 前一天日期 60 list_msg = '/home/coremail/bin/userutil --list-msg %s \'fid=2&time=%s\'' % (coremailuser, msgYesterdayDate) 61 logger(list_msg) 62 mailListResult = subprocess.Popen(list_msg, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 63 for line in mailListResult.stdout.readlines(): 64 # print line 65 mid = re.search("1tb[a-zA-Z0-9\+\-\*\/]{19}", line) 66 if mid: 67 logger(line.strip()) 68 exportUserDraftBoxMail(coremailuser.strip(), mid.group().strip()) 69 70 71 # 导出用户草稿箱中的邮件 72 def exportUserDraftBoxMail(coremailuser, mid): 73 userEmlDir = os.path.join(exportEmlDir, coremailuser) 74 print userEmlDir 75 if not os.path.isdir(userEmlDir): 76 logger('[-] create %s directories' % userEmlDir) 77 os.mkdir(userEmlDir) # 创建保存用户邮件的目录 78 # print coremailuser 79 # print mid 80 filterMid = re.sub('[\+\-\*\/]', '', mid) 81 # print filterMid 82 emlFileName = os.path.join(userEmlDir, filterMid) 83 dump_msg = '/home/coremail/bin/userutil --dump-msg %s %s>%s.eml' % (coremailuser, mid, emlFileName) 84 logger(dump_msg) 85 os.system(dump_msg) 86 87 88 orgID = ['a', 'b', 'c'] # 根据组织id中的用户导出邮件 89 90 91 if __name__ == '__main__': 92 if not os.path.isdir(exportEmlDir): 93 os.mkdir(exportEmlDir) # 创建邮件保存的目录 94 # listUserDraftBoxMail('admin@leejay.com.cn') 95 96 # 查找组织ID中的用户传入方法 97 for orgline in orgID: 98 select_user = '/home/coremail/bin/userutil --select-user @\'org_id="%s"\'' % orgline 99 logger(select_user) 100 userlistRelust = subprocess.Popen(select_user, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 101 for userline in userlistRelust.stdout.readlines(): 102 # print userline.strip() 103 listUserDraftBoxMail(userline.strip()) 104 105 # 打包压缩 106 compressFile() 107 108 print '[+] user mail save to %s' % exportEmlDir 109 print '[+] log save to %s' % loggerFile