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