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