导出用户草稿箱中的邮件

  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

 

posted @ 2021-02-03 20:14  leejay_python  阅读(433)  评论(0编辑  收藏  举报