37,719
社区成员
发帖
与我相关
我的任务
分享
#coding=utf-8
import time
import sys
from utils.mailHelper import mailHelper
from utils.excutor import executor
from utils.configReader import configReader
reload(sys)
sys.setdefaultencoding('utf-8')
class MCC(object):
CONFIGPATH='_config.ini'
KEY_COMMAND='Command'
KEY_OPEN='Open'
KEY_BOSS='Boss'
KEY_TIMELIMIT='timelimit'
def __init__(self):
self.mailHelper=mailHelper()
self.configReader=configReader(self.CONFIGPATH)
commandDict=self.configReader.getDict(self.KEY_COMMAND)
openDict=self.configReader.getDict(self.KEY_OPEN)
self.timelimit=int(self.configReader.readConfig(self.KEY_BOSS,self.KEY_TIMELIMIT))
self.excutor=executor(commandDict,openDict)
self.toRun()
def toRun(self):
while True:
self.run()
time.sleep(self.timelimit)
def run(self):
mailBody=self.mailHelper.acceptMail()
if mailBody:
exe=self.mailHelper.analysisMail(mailBody)
if exe:
self.excutor.execute(exe)
if __name__=='__main__':
mcc=MCC()
# coding=utf-8
import ConfigParser
import os,sys
class configReader(object):
def __init__(self,configPath):
configFile=os.path.join(sys.path[0],configPath)
self.cReader=ConfigParser.ConfigParser()
self.cReader.read(configFile)
def readConfig(self,section,item):
return self.cReader.get(section,item)
def getDict(self,section):
commandDict={}
items=self.cReader.items(section)
for key,value in items:
commandDict[key]=value
return commandDict
#coding=utf-8
import os
import mailHelper
import win32api
from utils.mccLog import mccLog
class executor(object):
def __init__(self,commandDict,openDict):
self.mccLog=mccLog()
self.mailHelper=mailHelper()
self.commandDict=commandDict
self.openDict=openDict
def execute(self,exe):
subject=exe['subject']
self.mccLog.mccWriteLog(u'开始处理命令。')
self.mailHelper.sendMail('pass','Slave')
if subject in self.commandDict:
self.mccLog.mccWriteLog(u'执行命令')
try:
command=self.commandDict[subject]
os.system(command)
self.mailHelper.sendMail('Success','Boss')
self.mccLog.mccWriteLog(u'执行命令成功')
except Exception,e:
self.mccLog.mccError(u'执行命令失败'+str(e))
self.mailHelper.sendMail('error','Boss',e)
elif subject in self.openDict:
self.mccLog.mccWriteLog(u'打开文件')
try:
openFile=self.openDict[subject]
win32api.ShellExecute(0,'open',openFile,'','',1)
self.mailHelper.sendMail('Success','Boss')
self.mccLog.mccWriteLog(u'打开文件成功')
except Exception,e:
self.mccLog.mccError(u'打开文件失败'+str(e))
self.mailHelper.sendMail('error','Boss',e)
else:
self.mailHelper.sendMail('error','boss','no such command')
#coding=utf-8
from email.mime.text import MIMEText
from configReader import configReader
from mccLog import mccLog
import poplib
import smtplib
import re
class mailHelper(object):
CONFIGPATH='_config.ini'
def __init__(self):
self.mccLog=mccLog()
cfReader=configReader(self.CONFIGPATH)
self.pophost=cfReader.readConfig('Slave','pophost')
self.smtphost=cfReader.readConfig('Slave','smtphost')
self.port=cfReader.readConfig('Slave','port')
self.username=cfReader.readConfig('Slave','username')
self.password=cfReader.readConfig('Slave','password')
self.bossMail=cfReader.readConfig('Boss','mail')
self.loginMail()
self.configSlaveMail()
def loginMail(self):
self.mccLog.mccWriteLog(u'开始登录邮箱')
try:
self.pp=poplib.POP3_SSL(self.pophost)
self.pp.set_debuglevel(0)
self.pp.user(self.username)
self.pp.pass_(self.password)
self.pp.list()
print u'登录成功!'
self.mccLog.mccWriteLog(u'登录邮箱成功。')
except Exception,e:
print u'登录失败!'
self.mccLog.mccError(u'登录邮箱失败'+str(e))
exit()
def acceptMail(self):
self.mccLog.mccWriteLog(u'开始抓取邮件')
try:
ret=self.pp.list()
mailBody=self.pp.retr(len(ret[1]))
self.mccLog.mccWriteLog(u'抓取邮件成功')
return mailBody
except Exception,e:
self.mccLog.mccError(u'抓取邮件失败'+str(e))
return None
def analysisMail(self,mailBody):
self.mccLog.mccWriteLog(u'开始抓取subject和发件人')
try:
subject=re.search(" 'Subject:(.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)
sender=re.search(" 'X-Sender:(.*?)',",str(mailBody[1]).decode('utf-8'),re.S).group(1)
command={'subject':subject,'sender':sender}
self.mccLog.mccWriteLog(u'抓取subject和发件人成功')
return command
except Exception,e:
self.mccLog.mccError(u'抓取subject和发件人失败'+str(e))
return None
def configSlaveMail(self):
self.mccLog.mccWriteLog(u'开始配置发件箱')
try:
self.handle=smtplib.SMTP(self.smtphost,self.port)
self.handle.login(self.username,self.password)
self.mccLog.mccWriteLog(u'发件箱配置成功')
except Exception,e:
self.mccLog.mccError(u'发件箱配置失败'+str(e))
exit()
def sendMail(self,subject,receiver,body='Success'):
msg=MIMEText(body,'plain','utf-8')
msg['Subject']=subject
msg['from']=self.username
self.mccLog.mccWriteLog(u'开始发送邮件'+'to'+receiver)
if receiver =='Slave':
try:
self.handle.sendmail(self.username,self.username,msg.as_string())
self.mccLog.mccWriteLog(u'发送邮件成功')
return True
except Exception,e:
self.mccLog.mccError(u'发送邮件失败'+str(e))
return False
elif receiver =='Boss':
try:
self.handle.sendmail(self.username,self.bossMail,msg.as_string())
self.mccLog.mccWriteLog(u'发送邮件成功')
except Exception,e:
self.mccLog.mccError(u'发送邮件失败'+str(e))
return False
if __name__ == '__main__':
mail=mailHelper()
body=mail.acceptMail()
print body
print mail.analysisMail(body)
mail.sendMail('test','Boss')
#coding:utf-8
import logging
from datetime import datetime
class mccLog(object):
def __init__(self):
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=datetime.now().strftime("%Y%m%d%H%M%S")+'.log',
filemode='a')
def mccWriteLog(self,logContent):
logging.info(logContent)
def mccError(self,errorContent):
logging.error(errorContent)